#include using namespace std; typedef long long ll; ll dp[5][1<<16][16]; int win[16][16]; int mat[16][16]; int main(){ for(int i = 0;i < 16;i++){ for(int j = 0;j < 16;j++){ cin >> mat[i][j]; } } for(int i = 0;i < 16;i++){ for(int j = 0;j < 16;j++){ if(i == j)win[i][j] = i; else{ int a = min(i,j),b = max(i,j); win[i][j]= mat[a][b] == 1?a:b; } } } for(int i = 0;i < 16;i++){ dp[0][1<>1; for(int m = 0;m < (1<<16);m++){ if(__builtin_popcount(m)==s){ for(int L = m;;L = (L-1)&m){ if(__builtin_popcount(L) == h){ int R = m^L; for(int x = 0;x < 16;x++){ if(m>>x&1) if(L>>x&1){ ll lw = dp[k-1][L][x]; ll rs = 0; for(int y=0;y<16;y++) if(R>>y&1&&win[x][y]==x) rs += dp[k-1][R][y]; dp[k][m][x] += lw*rs; }else{ ll rw = dp[k-1][R][x]; ll ls = 0; for(int y=0;y<16;y++) if(L>>y&1&&win[x][y]==x) ls += dp[k-1][L][y]; dp[k][m][x] += rw*ls; } } } if(L == 0)break; } } } } int f=(1<<16)-1; for(int i = 0;i < 16;i++){ cout << dp[4][f][i] <<'\n'; } return 0; }