#include #include #include #include using namespace std; int data[17][17]; const int LIMIT=16; long long int dp[70000][16]; vector seed[17]; vector perm[70000]; int isV(int p1,int p2){ if(p1>p2){ std::swap(p1,p2); } if(data[p1][p2]==1)return p1; return p2; } int main(){ memset(dp,0,sizeof(dp)); for(int i=0;i vec[17]; for(int i=1;i<=65535;i++){ bitset<16> b1(i); seed[b1.count()].push_back(i); int t=b1.count(); if(t==2||t==4||t==8||t==16){ for(int j=0;j<16;j++){ if((i&(1<r)continue; for(int x=0;x<8;x++){ for(int y=0;y<8;y++){ int a=perm[l][x]; int b=perm[r][y]; int v=isV(a,b); dp[l|r][v]+=(dp[l][a]*dp[r][b])*2; } } } for(int i=0;i<16;i++){ cout<