// Path: src/main/java/com/pengyifan/commons/lang/StringUtils.java
// public final class StringUtils {
// 
//   // │
//   public static final String BAR    = bar(1);
//   // └
//   public static final String END    = bar(2);
//   // ├
//   public static final String MIDDLE = bar(3);
// 
//   private StringUtils() throws InstantiationException {
//     throw new InstantiationException("This class is not for instantiation");
//   }
// 
//   private static String bar(int i) {
//     try {
//       switch (i) {
//       case 1:
//         return new String(new byte[] { -30, -108, -126 }, "utf8");
//       case 2:
//         return new String(new byte[] { -30, -108, -108 }, "utf8");
//       case 3:
//         return new String(new byte[] { -30, -108, -100 }, "utf8");
//       }
//     } catch (UnsupportedEncodingException e) {
//       e.printStackTrace();
//     }
//     return null;
//   }
// 
// }


import com.google.common.collect.Iterators;
import com.google.common.collect.Lists;
import com.pengyifan.commons.lang.StringUtils;
import edu.stanford.nlp.util.ErasureUtils;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.NoSuchElementException;
import java.util.Queue;
import java.util.Stack;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.StreamSupport;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkElementIndex;
import static com.google.common.base.Preconditions.checkNotNull;
  }

  /**
   * Returns this node's parent or null if this node has no parent.
   *
   * @return this node's parent Tree, or null if this node has no parent
   */
  public T getParent() {
    return parent;
  }

  /**
   * Returns the path from the root, to get to this node. The last element in the path is this
   * node.
   *
   * @return a list of Tree objects giving the path, where the first element in the path is the root
   * and the last element is this node.
   */
  public List<T> getPathFromRoot() {
    List<T> elderList = getPathToRoot();
    Collections.reverse(elderList);
    return elderList;
  }

  /**
   * Returns the path from this node to the root. The first element in the path is this node.
   *
   * @return a list of Tree objects giving the path, where the first element in the path is this
   * node and the last element is the root.
   */
// Path: src/main/java/com/pengyifan/commons/lang/StringUtils.java
// public final class StringUtils {
// 
//   // │
//   public static final String BAR    = bar(1);
//   // └
//   public static final String END    = bar(2);
//   // ├
//   public static final String MIDDLE = bar(3);
// 
//   private StringUtils() throws InstantiationException {
//     throw new InstantiationException("This class is not for instantiation");
//   }
// 
//   private static String bar(int i) {
//     try {
//       switch (i) {
//       case 1:
//         return new String(new byte[] { -30, -108, -126 }, "utf8");
//       case 2:
//         return new String(new byte[] { -30, -108, -108 }, "utf8");
//       case 3:
//         return new String(new byte[] { -30, -108, -100 }, "utf8");
//       }
//     } catch (UnsupportedEncodingException e) {
//       e.printStackTrace();
//     }
//     return null;
//   }
// 
// }


// Path: src/main/java/com/pengyifan/commons/collections/tree/Tree.java
import com.google.common.collect.Iterators;
import com.google.common.collect.Lists;
import com.pengyifan.commons.lang.StringUtils;
import edu.stanford.nlp.util.ErasureUtils;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.NoSuchElementException;
import java.util.Queue;
import java.util.Stack;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.StreamSupport;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkElementIndex;
import static com.google.common.base.Preconditions.checkNotNull;

  }

  /**
   * Returns this node's parent or null if this node has no parent.
   *
   * @return this node's parent Tree, or null if this node has no parent
   */
  public T getParent() {
    return parent;
  }

  /**
   * Returns the path from the root, to get to this node. The last element in the path is this
   * node.
   *
   * @return a list of Tree objects giving the path, where the first element in the path is the root
   * and the last element is this node.
   */
  public List<T> getPathFromRoot() {
    List<T> elderList = getPathToRoot();
    Collections.reverse(elderList);
    return elderList;
  }

  /**
   * Returns the path from this node to the root. The first element in the path is this node.
   *
   * @return a list of Tree objects giving the path, where the first element in the path is this
   * node and the last element is the root.
   */
  public List<T> getPathToRoot() {