class dsu: def __init__(self,n): self.n=n self.groupsize=[1 for _ in range(self.n)] self.root=[i for i in range(self.n)] def leader(self,target): if self.root[target]==target: return target self.root[target]=self.leader(self.root[target])#経路圧縮 return self.root[target] def merge(self,u,v): u=self.leader(u) v=self.leader(v) if u==v: return u if self.groupsize[v]>self.groupsize[u]:#マージテク u,v=v,u self.root[v]=u self.groupsize[u]+=self.groupsize[v] return self.root[v] def same(self,u,v): return self.leader(u)==self.leader(v) def size(self,u): return self.groupsize[self.leader(u)] h,w,n=map(int,input().split()) uf=dsu(h+w) for i in range(n): a,b=map(int,input().split()) a-=1 b-=1 uf.merge(a,b+h) gg=[[] for _ in range(h+w)] gcnt=0 for i in range(h+w): gg[uf.leader(i)].append(i) if gg[uf.leader(i)]==1: gcnt+=1 tg=[] for i in range(h+w): if len(gg[i]): tg.append(gg[i]) inf=1<<60 dp_mn=[inf for _ in range(h+1)] dp_mx=[-inf for _ in range(h+1)] dp_mn[0],dp_mx[0]=0,0 gcnt=len(tg) for i in range(gcnt): rc,cc=0,0 for j in tg[i]: if j