#include #include #include #include using namespace std; int getnum(int x) { int sum=0; while(x) { sum+=x%2; x/=2; } return sum; } int dir[4][2]={-1,0,0,1,1,0,0,-1}; char map[210][210]; int vis[210][210]; int po[20][2]; int num,n,m; int check(int x,int y) { if(x<1||y<1||x>n||y>m) return 0; return 1; } int isok(int flag,int limit) { int i; for(i=0;i>i)&1) { int x=po[i][0],y=po[i][1]; if(check(x-1,y)&&map[x-1][y]=='#') return 0; if(!vis[x-1][y]) vis[x-1][y]=1; if(check(x,y+1)&&map[x][y+1]=='#') return 0; if(!vis[x][y+1]) vis[x][y+1]=1; if(!vis[x][y]) vis[x][y]=1; } } for(i=0;i>i)&1) continue; if(isok(k,sum)) { ans=min(ans,1+getnum(k)); } } } } if(ans==2100000000) printf("-1\n"); else printf("%d\n",ans); } return 0; }