#!/usr/local/bin/python3 from itertools import permutations as P 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()) idx={w:k for k,x in enumerate(L) for w in x} def rv(w):return tuple(reversed(w)) key={} for k,x in enumerate(L):key[k]=idx[rv(x[0])] print('mapok',all(key[key[k]]==k for k in key),'pairs',sum(key[k]!=k for k in key)//2+sum(key[k]==k for k in key)) cs=tuple('1322100') print('classstar',[''.join(w) for w in sorted(G[S(cs)])]) print('revstarclass',[''.join(w) for w in sorted(G[S(tuple(reversed(cs)))])]) print('staridx',idx[cs],'revidx',idx[rv(cs)]) fixed=[''.join(x[0]) for k,x in enumerate(L) if key[k]==k] print('fixed',fixed) print('revsigformula',S(rv(cs)),S(cs))