sleepy
flatten
count and say
disjoint set (union-find set)