protected List<List<Match>> filterOutlierTranspositions(
        VariantGraph into, List<List<Match>> transpositions) {
      into.rank();
      LOG.debug("{}: Registering transpositions", into);
      List<List<Match>> filteredTranspositions = Lists.newArrayList(transpositions);
      for (List<Match> transposedPhrase : transpositions) {
        Match firstMatch = transposedPhrase.get(0);
        VariantGraphVertex from = firstMatch.vertex;
        Token token = firstMatch.token;
        VariantGraphVertex to = witnessTokenVertices.get(token);
        LOG.info("matchPhrase={}", transposedPhrase);
        int fromRank = from.getRank();
        //        LOG.info("from={}, rank={}", from, fromRank);
        int toRank = to.getRank();
        //        LOG.info("to={}, rank={}", to, toRank);
        int diff = Math.abs(toRank - fromRank);
        int size = transposedPhrase.size();

        int relDiff = diff / size;
        boolean acceptTransposition = relDiff < 5;
        LOG.info(
            "accept={}, relDiff={}, size={}, diff={}, from={}, to={}\n",
            new Object[] {acceptTransposition, relDiff, size, diff, from, to});
        if (acceptTransposition) {
          for (Match match : transposedPhrase) {
            into.transpose(match.vertex, witnessTokenVertices.get(match.token));
          }
        } else {
          filteredTranspositions.remove(transposedPhrase);
        }
      }
      return filteredTranspositions;
    }