#include<bits/stdc++.h>
using namespace std;
int minDiceThrowToLastCell(int **board, int n)
{
// Write your code here
int val = n*n;
vector<pair<int,int>> cells(val+1);
int label =1;
vector<int> columns(n);
iota(columns.begin(), columns.end(),0);
for(int row=n-1; row>=0;row--){
for(int column: columns){
cells[label++] = {row,column};
}
reverse(columns.begin(),columns.end());
}
vector<int> dist(val+1,-1);
queue<int> q;
dist[1] =0;
q.push(1);
while(!q.empty()){
int curr = q.front(); q.pop();
for(int next=curr+1;next<=min(curr+6,val);next++){
int row = cells[next].first,column = cells[next].second;
int dest = board[row][column] != -1 ? board[row][column] : next;
if(dist[dest] == -1){
dist[dest] = dist[curr] +1;
q.push(dest);
}
}
}
return dist[val];
}