private static List<Tree<String>> readTrees(String basePath, int low, int high, int maxLength) {
  	int actualTestTreeNum = 0;
    Collection<Tree<String>> trees = PennTreebankReader.readTrees(basePath, low, high);
    // normalize trees
    Trees.TreeTransformer<String> treeTransformer = new Trees.StandardTreeNormalizer();
    List<Tree<String>> normalizedTreeList = new ArrayList<Tree<String>>();
    for (Tree<String> tree : trees) {
      Tree<String> normalizedTree = treeTransformer.transformTree(tree);
      if (normalizedTree.getYield().size() > maxLength)
        continue;
//      System.out.println(Trees.PennTreeRenderer.render(normalizedTree));
      actualTestTreeNum++;
      normalizedTreeList.add(normalizedTree);
    }
    System.out.println("the number of trees below maxlength: " + actualTestTreeNum);
    return normalizedTreeList;
  }