#8错了
cpp:
#include<bits/stdc++.h>
#define st h.first
#define x h.second.first
#define y h.second.second
using namespace std;
int n,m,xx[4][2]={{0,1},{0,-1},{1,0},{-1,0}},c[2][1001][1001];
bool vis[1001][1001];
char a[1001][1001];
void bfs(){
queue<pair<int,pair<int,int> > >q;
q.push({0,{0,0}}),vis[0][0]=1;
while(q.size()){
auto h=q.front();
q.pop();
if(a[x][y]=='#'){
cout<<st;
return;
}for(int i=0;i<4;i++){
for(int j=0;j<10;j++){
int nx=x+(xx[i][0]<<j),ny=y+(xx[i][1]<<j);
if(nx<0||ny<0||nx>=n||ny>=m||a[nx][ny]=='X'||c[i>1][nx][ny]-c[i>1][x][y]>0)break;
if(vis[nx][ny])continue;
vis[nx][ny]=1,q.push({st+1,{nx,ny}});
}
}
}cout<<-1;
return;
}
int main(){
cin>>n>>m;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++)cin>>a[i][j],c[0][i][j]+=c[0][i][(!j?0:j-1)]+(a[i][j]=='X'),c[1][i][j]+=c[1][(!i?0:i-1)][j]+(a[i][j]=='X');
}bfs();
return 0;
}