/**
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int x;
int y;
} q;
int i, j, k, n, m, rear = -1, front = -1;
int arr[101][101] = {};
q queue[1001];
void push(int x, int y, int a)
{
if (y < 1 || y > n || x < 1 || x > m)
{
return ;
}
int z = arr[x][y] - a;
///printf("z : %d\n", z);
if (abs(z) > 1)
{
///printf("Fdsafdsafdasfdsafdsafda\n");
return ;
}
rear ++;
queue[rear].x = x;
queue[rear].y = y;
}
int main()
{
int cnt = 0;
scanf("%d %d", &n, &m);
for (i = 1 ; i <= n ; i ++)
{
for (j = 1 ; j <= m ; j ++)
{
scanf("%d", &arr[j][i]);
}
}
rear ++;
queue[rear].x = queue[rear].y = 1;
while (front != rear)
{
int ooo = rear;
for (i = front + 1 ; i <= ooo ; i ++)
{
front ++;
int nx = queue[front].x;
int ny = queue[front].y;
push(nx, ny - 1, arr[queue[rear].x][queue[rear].y]);
push(nx + 1, ny, arr[queue[rear].x][queue[rear].y]);
push(nx, ny + 1, arr[queue[rear].x][queue[rear].y]);
push(nx - 1, ny, arr[queue[rear].x][queue[rear].y]);
}
cnt ++;
///printf("r : %d\nf : %d\n", rear, front);
}
printf("%d", cnt);
return 0;
}
**/
#include <stdio.h>
typedef struct
{
int x;
int y;
} q;
int i, j, k, n, m, rear = -1, front = -1;
int arr[101][101] = {};
q queue[1001] = {};
void push(int x, int y, int data)
{
int z = abs(data - arr[y][x]);
if (y < 1 || y > n || x < 1 || x > m || z > 1)
{
return ;
}
rear ++;
queue[rear].x = x;
queue[rear].y = y;
}
int main()
{
scanf("%d %d", &n, &m);
for (i = 1 ; i <= n ; i ++)
{
for (j = 1 ; j <= m ; j ++)
{
scanf("%d", &arr[i][j]);
}
}
rear ++;
queue[rear].x = 1;
queue[rear].y = 1;
while (front != rear)
{
front ++;
int nx = queue[front].x;
int ny = queue[front].y;
push(nx, ny - 1, arr[ny][nx]);
push(nx + 1, ny, arr[ny][nx]);
push(nx, ny + 1, arr[ny][nx]);
push(nx - 1, ny, arr[ny][nx]);
}
return 0;
}
u