#include #include #include #include #include #include using namespace std; using ll = long long; using P = pair; bool reach(int n, vector& s){ vector ok(n, vector(n)); queue

bfs; bfs.emplace(0, 0); int di[4]={-1, 0, 1, 0}; int dj[4]={0, 1, 0, -1}; while(bfs.size()){ auto [i, j]=bfs.front(); bfs.pop(); if(ok[i][j]) continue; ok[i][j]=1; for(int k=0; k<4; k++){ int ni=i+di[k], nj=j+dj[k]; if(ni<0||nj<0||ni>=n||nj>=n) continue; if(s[ni][nj]=='#') continue; bfs.emplace(ni, nj); } } return ok[n-1][n-1]; } void Print(vector& s){ for(auto&p:s) cout << p << endl; } void exp(int n){ ll mx=(1ll<<(n*n)); map, bool> goal; set> all; for(ll i=0; i>(n*n-1)&1)) continue; vector now(n, string(n, '.')); for(int j=0; j>p&1) now[j][k]='#'; } goal[now]=reach(n, now); all.insert(now); } for(ll i=0; i>(n*n-1)&1)) continue; vector now(n, string(n, '.')); for(int j=0; j>p&1) now[j][k]='#'; } bool alice_win=true; { for(int li=1; li t=now; for(int ni=li; ni<=ri; ni++)for(int nj=0; nj t=now; for(int ni=0; ni> n; for(int i=0; i