#include #include #include #include #include #include #include #include #include #include #include #include #define mem(a,b) memset(a,b,sizeof(a)) using namespace std; typedef long long ll; typedef unsigned int ui; const int maxn=508; const int Mod=1e9+7; int T,n,m,q; int s[maxn][maxn]; char mp[maxn][maxn]; int curmp[maxn][maxn]; bool vis[maxn][maxn]; int block[maxn*maxn][2]; int dir[4][2]={0,1,0,-1,-1,0,1,0}; int maxblock; struct Node { int x,y; Node(){} Node(int tx,int ty){x=tx; y=ty;} }; inline bool in(int x,int y) { if (x>=0 && x=0 && y qu; qu.push(Node(sx,sy)); Node t; int dx,dy; mem(vis,0); vis[sx][sy]=1; while(!qu.empty()){ t=qu.front(); qu.pop(); for (int i=0;i<4;i++){ dx=t.x+dir[i][0]; dy=t.y+dir[i][1]; if (in(dx,dy) && curmp[dx][dy]==0 && !vis[dx][dy]){ if (dx==0) return true; vis[dx][dy]=1; qu.push(Node(dx,dy)); } } } return false; } bool run(int pos) { // if (pos>maxblock){ // memcpy(curmp,s,sizeof(s)); // for (int i=maxblock+1;i<=pos;i++) curmp[block[i][0]][block[i][1]]=1; // maxblock=pos; // }else if (pos>1; // cout<>1; if (run(a) && run(b) && run(c)) printf("-1\n"); else printf("%d\n",min(min(a,b),c)); //cout<