class UnionFind:
def __init__(self):
self.parent = {}
def find(self, a):
if a not in self.parent:
self.parent[a] = a
return a
acopy = a
while a != self.parent[a]:
a = self.parent[a]
while acopy != a:
self.parent[acopy], acopy = a, self.parent[acopy]
return a
def merge(self, a, b):
if a not in self.parent:
self.parent[a] = a
if b not in self.parent:
self.parent[b] = b
self.parent[self.find(b)] = self.find(a)