https://www.acmicpc.net/problem/16234
import sys
from collections import deque
dx=[-1,1,0,0]
dy=[0,0,-1,1]
N, L, R=map(int, sys.stdin.readline().split())
world=[list(map(int, sys.stdin.readline().split())) for _ in range(N)]
queue = deque()
flag=False
def find(a, b):
global flag
cnt=1
sum=world[a][b]
tmp=[[a, b]]
queue.append((a, b))
while queue:
x,y=queue.popleft()
for i in range(4):
nx=x+dx[i]
ny=y+dy[i]
if 0<=nx<N and 0<=ny<N and not visited[nx][ny]:
if L<=abs(world[nx][ny]-world[x][y])<=R:
visited[nx][ny] = True
cnt+=1
sum+=world[nx][ny]
tmp.append((nx, ny))
queue.append([nx,ny])
if cnt>1:
res = sum // cnt
flag=True
for i, j in tmp:
world[i][j] = res
total=0
while True:
visited = [[False] * N for _ in range(N)]
flag=False
for i in range(N):
for j in range(N):
if not visited[i][j]:
visited[i][j]=True
find(i, j)
if not flag:
break
total+=1
print(total)