public DisjointSets computeEquivalence() {
		computePairs();
		
		if(DEBUG) {
			System.out.println("Equivalence table: ");
			for(int i = 0; i < nStates; i++) {
				for(int j = 0; j < nStates; j++)
					System.out.print((table[i][j] ? "1" : "0") + " ");
				System.out.println();
			}
		}
		
		DisjointSets uf = new DisjointSets(nStates);
		for(int i = 0; i < nStates; i++)
			for(int j = i + 1; j < nStates; j++)
				if(areEquivalent(i, j)) {
					if(DEBUG)
						System.out.println(String.format("Joining %d and %d", i, j));
					uf.union(i, j);
				}
		return uf;
	}