#include #include #include #include #include #include using namespace std; const int MAXN = 100*100+10; int n; vector edge[MAXN]; int m1[MAXN], m2[MAXN], c[MAXN]; int dfs(int u) { if (u<0) return 1; if (c[u]) return 0; c[u] = 1; for(vector::iterator i=edge[u].begin();i!=edge[u].end();i++) if (dfs(m2[*i])) { m1[u] = *i; m2[*i] = u; return 1; } return 0; } int dfs2(int u) { if (u<0) return 1; if (c[u]) return 0; c[u] = 1; for(vector::iterator i=edge[u].begin();i!=edge[u].end();i++) if (dfs2(m1[*i])) { //m1[u] = *i; //m2[*i] = u; return 1; } return 0; } int side[MAXN]; void scase() { char board[101][101]; int rows, cols; scanf("%d%d",&rows,&cols); if (rows==0 && cols==0) exit(0); for(int i=0;i0 && board[i-1][j]=='.') edge[i*cols+j].push_back((i-1)*cols+j); if (j>0 && board[i][j-1]=='.') edge[i*cols+j].push_back(i*cols+(j-1)); if (i