#include #include using namespace std; void fun(int a, int b, int x, int y, int**m, int n) { queue q1,q2; q1.push(x); q2.push(y); m[x][y]=0; while(!q1.empty()) { x=q1.front(); y=q2.front(); q1.pop(); q2.pop(); if(x+a 1+m[x][y]) { m[x+a][y+b]=1+m[x][y]; q1.push(x+a); q2.push(y+b); } } } if(y-b>=0 && x+a 1+m[x][y]) { m[x+a][y-b]=1+m[x][y]; q1.push(x+a); q2.push(y-b); } } } if(x-a>=0 && y-b>=0) { if(m[x-a][y-b]==0) { m[x-a][y-b]=1+m[x][y]; q1.push(x-a); q2.push(y-b); } else { if(m[x-a][y-b]>1+m[x][y]) { m[x-a][y-b]=1+m[x][y]; q1.push(x-a); q2.push(y-b); } } } if(x-a>=0 && y+b1+m[x][y]) { m[x-a][y+b]=1+m[x][y]; q1.push(x-a); q2.push(y+b); } } } if(x+b 1+m[x][y]) { m[x+b][y+a]=1+m[x][y]; q1.push(x+b); q2.push(y+a); } } } if(y-a>=0 && x+b 1+m[x][y]) { m[x+b][y-a]=1+m[x][y]; q1.push(x+b); q2.push(y-a); } } } if(x-b>=0 && y+a1+m[x][y]) { m[x-b][y+a]=1+m[x][y]; q1.push(x-b); q2.push(y+a); } } } if(x-b>=0 && y-a>=0) { if(m[x-b][y-a]==0) { m[x-b][y-a]=1+m[x][y]; q1.push(x-b); q2.push(y-a); } else { if(m[x-b][y-a]>1+m[x][y]) { m[x-b][y-a]=1+m[x][y]; q1.push(x-b); q2.push(y-a); } } } } } int main() { int n; cin>>n; int **m; m=new int*[n]; for(int i=0;i