/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
class Ref<T> {
private T item = null;
public Ref(T item
) { this.
item = item
; } public T get() { return item; }
public void set(T newValue) { item = newValue; }
}
class RefPair<A, B> {
private final Ref<A> aRef;
private final Ref<B> bRef;
public RefPair() {
this(new Ref<A>(), new Ref<B>());
}
private RefPair(Ref<A> aRef, Ref<B> bRef) {
this.aRef = aRef;
this.bRef = bRef;
}
public RefPair<B, A> inverted() { return new RefPair<>(bRef, aRef); }
public A getFirst() { return aRef.get(); }
public void setFirst(A newA) { aRef.set(newA); }
public B getSecond() { return bRef.get(); }
public void setSecond(B newB) { bRef.set(newB); }
}
enum Flipper {
A(makePair()),
B(makePair()),
Y(B.pair.inverted()),
Z(A.pair.inverted());
private final RefPair<Flipper, Flipper> pair;
private Flipper(RefPair<Flipper, Flipper> pair) {
this.pair = pair;
pair.setFirst(this);
}
public Flipper flip() { return pair.getSecond(); }
private static RefPair<Flipper, Flipper> makePair() {
return new RefPair();
}
}
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
{
System.
out.
println(Flipper.
A); System.
out.
println(Flipper.
A.
flip()); System.
out.
println(Flipper.
Z); System.
out.
println(Flipper.
Z.
flip()); }
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgpjbGFzcyBSZWY8VD4gewoJcHJpdmF0ZSBUIGl0ZW0gPSBudWxsOwoJcHVibGljIFJlZigpIHt9CglwdWJsaWMgUmVmKFQgaXRlbSkgeyB0aGlzLml0ZW0gPSBpdGVtOyB9CglwdWJsaWMgVCBnZXQoKSB7IHJldHVybiBpdGVtOyB9CglwdWJsaWMgdm9pZCBzZXQoVCBuZXdWYWx1ZSkgeyBpdGVtID0gbmV3VmFsdWU7IH0KfQoKY2xhc3MgUmVmUGFpcjxBLCBCPiB7Cglwcml2YXRlIGZpbmFsIFJlZjxBPiBhUmVmOwoJcHJpdmF0ZSBmaW5hbCBSZWY8Qj4gYlJlZjsKCQoJcHVibGljIFJlZlBhaXIoKSB7CgkJdGhpcyhuZXcgUmVmPEE+KCksIG5ldyBSZWY8Qj4oKSk7Cgl9CgkKCXByaXZhdGUgUmVmUGFpcihSZWY8QT4gYVJlZiwgUmVmPEI+IGJSZWYpIHsKCQl0aGlzLmFSZWYgPSBhUmVmOwoJCXRoaXMuYlJlZiA9IGJSZWY7Cgl9CgkKCXB1YmxpYyBSZWZQYWlyPEIsIEE+IGludmVydGVkKCkgeyByZXR1cm4gbmV3IFJlZlBhaXI8PihiUmVmLCBhUmVmKTsgfQoJCglwdWJsaWMgQSAJZ2V0Rmlyc3QoKSAJCSAgeyByZXR1cm4gYVJlZi5nZXQoKTsgfQoJcHVibGljIHZvaWQgc2V0Rmlyc3QoQSBuZXdBKSAgeyBhUmVmLnNldChuZXdBKTsgfQoJcHVibGljIEIJZ2V0U2Vjb25kKCkgCSAgeyByZXR1cm4gYlJlZi5nZXQoKTsgfQoJcHVibGljIHZvaWQgc2V0U2Vjb25kKEIgbmV3QikgeyBiUmVmLnNldChuZXdCKTsgfQp9CgplbnVtIEZsaXBwZXIgewoJQShtYWtlUGFpcigpKSwKCUIobWFrZVBhaXIoKSksCglZKEIucGFpci5pbnZlcnRlZCgpKSwKCVooQS5wYWlyLmludmVydGVkKCkpOwoJCglwcml2YXRlIGZpbmFsIFJlZlBhaXI8RmxpcHBlciwgRmxpcHBlcj4gcGFpcjsKCQoJcHJpdmF0ZSBGbGlwcGVyKFJlZlBhaXI8RmxpcHBlciwgRmxpcHBlcj4gcGFpcikgewoJCXRoaXMucGFpciA9IHBhaXI7CgkJcGFpci5zZXRGaXJzdCh0aGlzKTsKCX0KCQoJcHVibGljIEZsaXBwZXIgZmxpcCgpIHsgcmV0dXJuIHBhaXIuZ2V0U2Vjb25kKCk7IH0KCQoJcHJpdmF0ZSBzdGF0aWMgUmVmUGFpcjxGbGlwcGVyLCBGbGlwcGVyPiBtYWtlUGFpcigpIHsKCQlyZXR1cm4gbmV3IFJlZlBhaXIoKTsKCX0KfQoKLyogTmFtZSBvZiB0aGUgY2xhc3MgaGFzIHRvIGJlICJNYWluIiBvbmx5IGlmIHRoZSBjbGFzcyBpcyBwdWJsaWMuICovCmNsYXNzIElkZW9uZQp7CglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb24KCXsKCQlTeXN0ZW0ub3V0LnByaW50bG4oRmxpcHBlci5BKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oRmxpcHBlci5BLmZsaXAoKSk7CgkJU3lzdGVtLm91dC5wcmludGxuKEZsaXBwZXIuWik7CgkJU3lzdGVtLm91dC5wcmludGxuKEZsaXBwZXIuWi5mbGlwKCkpOwoJfQp9