#include #include #include #include #include #include using namespace std; struct node { int x,y; }nd[16]; long long dp[1<<16][16]; int n,m,gp[6][6],pos,gd[6][6],mp[6][6]; int gcd(int x,int y) { if (y == 0) return x; return gcd(y, x % y); } bool ok(int x,int y,int sta) { int x1=nd[x].x,x2=nd[y].x,y1=nd[x].y,y2=nd[y].y; int dx=x2-x1; int dy=y2-y1; int c=gd[abs(dx)][abs(dy)]; dx=dx/c;dy=dy/c; for(int i=0;i<=5;i++) { x1+=dx;y1+=dy; if(gp[x1][y1]==1) return false; else if(x1==x2&&y1==y2) return true; else if(gp[x1][y1]==0&&(sta&(1<<(mp[x1][y1])))==0) return false; } return false; } long long DP(int st,int k) { if(dp[st][k]!=-1)return dp[st][k]; if(st==(1<