public void build() {
		for (int i = 1; i <= graph.V(); i++) {
			KK<Integer> next = new KK<>(graph);
			next.add(i);
			clusters.add(next);
		}
		List<WeightedGraph.Edge> edges = graph.edges();
		Collections.sort(edges);

		int k = clusters.size();

		int i = 0;
		while (k != K) {
			System.err.println("------------ " + k);
			for (i = 0; i < edges.size(); i++) {
				WeightedGraph.Edge next = edges.get(i);
				System.err.println("::" + i + " " + next.weight());
				int either = next.either();
				int other = next.other(either);
				KK clus1 = find(either);
				KK clus2 = find(other);
				if (clus1 != clus2) {
					k--;
					clus1.merge(clus2);
					clusters.remove(clus2);
					edges.remove(next);
					break;
				}
			}
		}

		for (i = 0; i < edges.size(); i++) {
			WeightedGraph.Edge next = edges.get(i);
			int either = next.either();
			int other = next.other(either);
			KK clus1 = find(either);
			KK clus2 = find(other);
			if (clus1 != clus2) {
				break;
			}
		}
		System.err.println("DIST:" + (i) + " " + edges.get(i).weight());

		for (KK next : clusters) {
			System.err.println("Cluster: " + next);
		}
	}