#!/usr/local/bin/python3 from itertools import permutations as P,combinations as Q from collections import defaultdict as D W=sorted(set(P('0011223'))) def fd(w,u): a=[0]*(len(u)+1) a[0]=1 for ch in w: for j in range(len(u)-1,-1,-1): if ch==u[j]:a[j+1]+=a[j] return a[-1] def S(w):return tuple(fd(w,u) for u in ('01','12','23','012','123','0123')) G=D(list) for w in W:G[S(w)].append(w) L=list(G.values()) can=sorted(min(c) for c in L) def d(w):return sum(w[i]>w[i+1] for i in range(6)) print('words',len(W),'size',sum(map(len,L)),'d2direct',sum(d(w)==2 for w in W),'d2class',sum(sum(d(w)==2 for w in x) for x in L)) print('distinctSigs',len({S(w) for w in W}),'classes',len(L)) print('sizes_sorted',sorted(len(x) for x in L)) print('allcanon',[''.join(c) for c in can])