docs: public List<AlignedExpressionTree> getBestAlignments(AlignmentExample example, int beamSize) {
      CfgParser parser = getCfgParser(example);
      ExpressionTree tree = example.getTree();
      
      Factor rootFactor = getRootFactor(tree, parser.getParentVariable());
      
      List<CfgParseTree> parseTrees = parser.beamSearch(example.getWords(), beamSize);
      List<AlignedExpressionTree> expressionTrees = Lists.newArrayList();
      for (CfgParseTree parseTree : parseTrees) {
        if (rootFactor.getUnnormalizedProbability(parseTree.getRoot()) > 0) {
          expressionTrees.add(decodeCfgParse(parseTree, 0));
        }
      }
      return expressionTrees;
    }