import java.io.*; class GraphNode implements Serializable { GraphNode( String s ) { this.s = s; } public String toString() { return this.s; } String s; GraphNode a; GraphNode b; GraphNode c; GraphNode d; } public class HairyGraph implements Serializable { GraphNode A; GraphNode B; GraphNode C; GraphNode D; HairyGraph() { A = new GraphNode( "A" ); B = new GraphNode( "B" ); C = new GraphNode( "C" ); D = new GraphNode( "D" ); A.a = B; A.b = C; A.c = D; A.d = A; B.a = C; B.b = D; B.c = A; B.d = B; C.a = D; C.b = A; C.c = B; C.d = C; D.a = A; D.b = B; D.c = C; D.d = D; } public boolean equals( Object o ) { HairyGraph hg = (HairyGraph)o; return (A.a == B.d) && (A.a == C.c) && (A.a == D.b) && (A.b == B.a) && (A.b == C.d) && (A.b == D.c) && (A.c == B.b) && (A.c == C.a) && (A.c == D.d) && (A.d == B.c) && (A.d == C.b) && (A.d == D.a); } void printOneLevel( GraphNode gn ) { System.out.println( "GraphNode< " + gn + ": " + gn.a + ", " + gn.b + ", " + gn.c + ", " + gn.d + " >" ); } }