/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
public static class BDD {
static final BDD TRUE = new BDD();
static final BDD FALSE = new BDD();
BDD trueC, falseC;
boolean isDAG(){
return isDAG(new HashSet<BDD>());
}
boolean isDAG(HashSet<BDD> p) {
if (p.contains(this)) {
return false;
}
p.add(this);
boolean ret = (trueC == null || trueC.isDAG(p)) && (falseC == null || falseC.isDAG(p));
p.remove(this);
return ret;
}
}
{
// b=TRUE <-- a <-- c
// a is not the root of the DAG!
BDD a = new BDD();
BDD b = BDD.TRUE;
BDD c = new BDD();
c.trueC = a;
a.v = "a";
c.v = "c";
System.
out.
println("b=TRUE <-- a <-- c: failed? " + (a.
isDAG() ? "yes" : "no")); }
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCXB1YmxpYyBzdGF0aWMgY2xhc3MgQkREIHsKCQlzdGF0aWMgZmluYWwgQkREIFRSVUUgPSBuZXcgQkREKCk7CgkJc3RhdGljIGZpbmFsIEJERCBGQUxTRSA9IG5ldyBCREQoKTsKCQlCREQgdHJ1ZUMsIGZhbHNlQzsKCQlTdHJpbmcgdjsKCQoJCWJvb2xlYW4gaXNEQUcoKXsKCQkJcmV0dXJuIGlzREFHKG5ldyBIYXNoU2V0PEJERD4oKSk7CgkJfQoJCgkJYm9vbGVhbiBpc0RBRyhIYXNoU2V0PEJERD4gcCkgewoJICAgIAlpZiAocC5jb250YWlucyh0aGlzKSkgewoJCSAgICAJcmV0dXJuIGZhbHNlOwoJICAgIAl9CgkgICAgCXAuYWRkKHRoaXMpOwoJICAgIAlib29sZWFuIHJldCA9ICh0cnVlQyA9PSBudWxsIHx8IHRydWVDLmlzREFHKHApKSAmJiAoZmFsc2VDID09IG51bGwgfHwgZmFsc2VDLmlzREFHKHApKTsKCSAgICAJcC5yZW1vdmUodGhpcyk7CgkgICAgCXJldHVybiByZXQ7CgkJfQoJfQoKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoJCS8vIGI9VFJVRSA8LS0gYSA8LS0gYwoJCS8vIGEgaXMgbm90IHRoZSByb290IG9mIHRoZSBEQUchCgkJQkREIGEgPSBuZXcgQkREKCk7CgkJQkREIGIgPSBCREQuVFJVRTsKCQlCREQgYyA9IG5ldyBCREQoKTsKCQljLnRydWVDID0gYTsKCQkKCQlhLnYgPSAiYSI7CgkJYy52ID0gImMiOwoJCVN5c3RlbS5vdXQucHJpbnRsbigiYj1UUlVFIDwtLSBhIDwtLSBjOiBmYWlsZWQ/ICIgKyAoYS5pc0RBRygpID8gInllcyIgOiAibm8iKSk7Cgl9Cn0=