elements 0..7, each in its own set
after MakeSet    parent =  0  1  2  3  4  5  6  7   rank = 0 0 0 0 0 0 0 0   sets=8
Union(0,1)       parent =  0  0  2  3  4  5  6  7   rank = 1 0 0 0 0 0 0 0   sets=7
Union(2,3)       parent =  0  0  2  2  4  5  6  7   rank = 1 0 1 0 0 0 0 0   sets=6
Union(4,5)       parent =  0  0  2  2  4  4  6  7   rank = 1 0 1 0 1 0 0 0   sets=5
Union(6,7)       parent =  0  0  2  2  4  4  6  6   rank = 1 0 1 0 1 0 1 0   sets=4
Union(0,2)       parent =  0  0  0  2  4  4  6  6   rank = 2 0 1 0 1 0 1 0   sets=3
Union(4,6)       parent =  0  0  0  2  4  4  4  6   rank = 2 0 1 0 2 0 1 0   sets=2
Union(0,4)       parent =  0  0  0  2  0  4  4  6   rank = 3 0 1 0 2 0 1 0   sets=1
Union(1,5) noop  parent =  0  0  0  2  0  0  4  6   rank = 3 0 1 0 2 0 1 0   sets=1

every element now reports the same representative:
  find(0)=0 find(1)=0 find(2)=0 find(3)=0 find(4)=0 find(5)=0 find(6)=0 find(7)=0 
after finds      parent =  0  0  0  0  0  0  0  0   rank = 3 0 1 0 2 0 1 0   sets=1

witness that path compression flattens: a chain built by hand
before find(5)   parent =  0  0  0  2  0  4   rank = 2 0 1 0 1 0   sets=1
find(5) = 0
after find(5)    parent =  0  0  0  2  0  0   rank = 2 0 1 0 1 0   sets=1
