/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
import java.util.stream.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
static class Tree<T> {
List<Tree<T>> children = new ArrayList<>();
T rootValue;
Tree(T rootValue) {
this.rootValue = rootValue;
}
Tree<T> add(Tree<T>... children) {
this.
children.
addAll(Arrays.
asList(children
)); return this;
}
public String toIndentedString
() { return "\n" + rootValue + children.stream()
.map(Tree::toIndentedString)
.map(s -> s.substring(0, s.length() - 1))
.map(s -> s.replaceAll("\n", "\n "))
.collect(Collectors.joining())
+ "\n";
}
}
public static void main
(String[] args
) { Tree<String> tree =
new Tree<>("food")
.add(new Tree<>("meat")
.add(new Tree<>("fish")
.add(new Tree<>("salmon"))
.add(new Tree<>("cod"))
.add(new Tree<>("tuna"))
.add(new Tree<>("shark"))
)
)
.add(new Tree<>("fruit"))
.add(new Tree<>("vegetable"));
System.
out.
println("[" + tree.
toIndentedString() + "]"); }
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CmltcG9ydCBqYXZhLnV0aWwuc3RyZWFtLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCXN0YXRpYyBjbGFzcyBUcmVlPFQ+IHsKCQlMaXN0PFRyZWU8VD4+IGNoaWxkcmVuID0gbmV3IEFycmF5TGlzdDw+KCk7CgkJVCByb290VmFsdWU7CgkJCgkJVHJlZShUIHJvb3RWYWx1ZSkgewoJCQl0aGlzLnJvb3RWYWx1ZSA9IHJvb3RWYWx1ZTsKCQl9CgkJCgkJVHJlZTxUPiBhZGQoVHJlZTxUPi4uLiBjaGlsZHJlbikgewoJCQl0aGlzLmNoaWxkcmVuLmFkZEFsbChBcnJheXMuYXNMaXN0KGNoaWxkcmVuKSk7CgkJCXJldHVybiB0aGlzOwoJCX0KCQkKCQlwdWJsaWMgU3RyaW5nIHRvSW5kZW50ZWRTdHJpbmcoKSB7CgkJCXJldHVybiAiXG4iICsgcm9vdFZhbHVlICsgY2hpbGRyZW4uc3RyZWFtKCkKCQkJCQkubWFwKFRyZWU6OnRvSW5kZW50ZWRTdHJpbmcpCgkJCQkJLm1hcChzIC0+IHMuc3Vic3RyaW5nKDAsIHMubGVuZ3RoKCkgLSAxKSkKCQkJCQkubWFwKHMgLT4gcy5yZXBsYWNlQWxsKCJcbiIsICJcbiAgIikpCgkJCQkJLmNvbGxlY3QoQ29sbGVjdG9ycy5qb2luaW5nKCkpCgkJCQkJKyAiXG4iOwoJCX0KCX0KCQoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewoJCVRyZWU8U3RyaW5nPiB0cmVlID0KCQkJbmV3IFRyZWU8PigiZm9vZCIpCgkJCQkuYWRkKG5ldyBUcmVlPD4oIm1lYXQiKQoJCQkJCS5hZGQobmV3IFRyZWU8PigiZmlzaCIpCgkJCQkJCS5hZGQobmV3IFRyZWU8Pigic2FsbW9uIikpCgkJCQkJCS5hZGQobmV3IFRyZWU8PigiY29kIikpCgkJCQkJCS5hZGQobmV3IFRyZWU8PigidHVuYSIpKQoJCQkJCQkuYWRkKG5ldyBUcmVlPD4oInNoYXJrIikpCgkJCQkJKQoJCQkJKQoJCQkJLmFkZChuZXcgVHJlZTw+KCJmcnVpdCIpKQoJCQkJLmFkZChuZXcgVHJlZTw+KCJ2ZWdldGFibGUiKSk7CgkJCgkJU3lzdGVtLm91dC5wcmludGxuKCJbIiArIHRyZWUudG9JbmRlbnRlZFN0cmluZygpICsgIl0iKTsKCX0KfQ==