class C1<T extends T> {
private T value;
public boolean equals(Object obj) {
return this == obj || obj instanceof C1 && ((C1>)obj).value == value;
}
}
class C2<A extends B, B extends A> {
private A a;
private B b;
public boolean equals(Object obj) {
return this == obj || obj instanceof C2 && ((C2, ?>)obj).a == a && ((C2, ?>)obj).b == b;
}
}