#include<stdio.h>
int main (){
    int x,y,dist;
}
node;
int dx[4]={-1,1,0,0};
int dy[4]={0,0,-1,1};
node queue[MAX*MAX];
int front =0,rear=0;
void enqueue(Node n){
    queue[rear++]=n;
}
node dequeue(){
    return queue[front++];
}
int isempty(){
    return front==rear;
}
int bfs(int grid[MAX][MAX],int m, int n){
    if (grid[0][0]==0||grid[m - 1][n - 1]==0)
    return -1;
int visited[MAX][MAX]={0};
visited[0][0] =1;
enqueue ((node){0,0,1});
while (!isempty()){
    node current =dequeue();
    if (current.x == m-1 && current.y == n-1)
    return current.dist;
    for(int i=0; i< 4; i++){
        int nx = current.x + dx[i];
        int ny = current.y + dy[i];
        if(nx >=0 && ny >= 0 && nx <m && ny< n && grid[nx][ny]==1 &&!visited[nx][ny]){
            visited[nx][ny] = 1;
            enqueue((node){nx,ny,current dist+1});
        }
    }
}
return -1;
}
int main(){
    int m,n;
    scanf("%d", &grid[i][j]);
}
}
int result = bfs(grid, m,n);
printf("%d\n",result);
return 0;
}