#!/usr/bin/env python3 import urllib.request exec(urllib.request.urlopen('https://eval.dan.co.jp/friends/2026/10/31/c0ff0ef5348609407d7df832dff85896f864a9cfc694b5feed038db12423e4e6').read()) def mp(st): d={} for b in st: m=min(b) for i in b:d[i]=m return d def tr2(st): d=mp(st) A=set() for u,v in S0: for v2,w in T0: if d[v]==d[v2] and d[u]!=d[w] and d[v]!=d[w]:A.add((d[u],d[v],d[w])) return sorted(A) def mg2(st,x,z): d=mp(st) m=min(x,z) for i in C: if d[i]==x or d[i]==z:d[i]=m e={} for i in C:e.setdefault(d[i],set()).add(i) return frozenset(frozenset(b) for b in e.values()) root=frozenset(frozenset([i]) for i in C) seen2=set() Q=[root] while Q: st=Q.pop() if st in seen2:continue seen2.add(st) A=tr2(st) if A: x,y,z=A[0] Q.append(mg2(st,x,z)) Q.append(mg2(st,y,z)) def tof(st): d=mp(st) return tuple(d[i] for i in C) p1=set() for st in seen2:p1.add(tof(st)) print('p1',len(p1),'seen',len(seen),'equal',p1==seen) print('p1minusseen',sorted(p1-seen)) print('seenminusp1',sorted(seen-p1))