boolean union(int u, int v) {
		if ((u = set(u)) == (v = set(v)))
			return false;
		if (rnk[u] < rnk[v]) {
			set[u] = v;
		} else {
			set[v] = u;
			if (rnk[u] == rnk[v])
				rnk[u]++;
		}
		return true;
	}