B=enumerate
O=(0,1),(0,-1),(1,0),(-1,0)
C=lambda b:[(x,r,y,v)for x,r in B(b)for y,v in B(r)]
H=list.count
def I(b,x,y,s):
b=eval(str(b));b[x][y]=0
if b in s:return
t=[(x,y)for x,_,y,v in C(b)if v];q=[t.pop()]
while q:
x,y=q.pop(0)
for T,H in O:
if(E:=(x+T,y+H))in t:q+=E,;t.remove(E)
if[]==t:return b
def f(b):
q,*s=[b],
while q:
b,R=q.pop(0),1
for x,r,y,v in C(b):
if v and(H(r,v)>1or H([*[*zip(*b)][y]],v)>1)and(R:=0)<all(b[x+T][y+H]for T,H in O if len(b)>x+T>-1<y+H<len(r))and(K:=I(b,x,y,s)):q+=K,;s+=K,
if R:return b
s1 = '''
2 2 2 4
1 4 2 3
2 3 2 1
3 4 1 2
'''
s2 = '''
4 2 4 3
4 1 1 2
3 1 2 1
4 3 1 3
'''
s3 = '''
1 5 3 1 2
5 4 1 3 4
3 4 3 1 5
4 4 2 3 3
2 1 5 4 4
'''
def to_board(o_b):
return [[*map(int, i.split())]for i in filter(None, o_b.split('\n'))]
print(f(to_board(s1)))
print(f(to_board(s2)))
print(f(to_board(s3)))
Qj1lbnVtZXJhdGUKTz0oMCwxKSwoMCwtMSksKDEsMCksKC0xLDApCkM9bGFtYmRhIGI6Wyh4LHIseSx2KWZvciB4LHIgaW4gQihiKWZvciB5LHYgaW4gQihyKV0KSD1saXN0LmNvdW50CmRlZiBJKGIseCx5LHMpOgogYj1ldmFsKHN0cihiKSk7Ylt4XVt5XT0wCiBpZiBiIGluIHM6cmV0dXJuCiB0PVsoeCx5KWZvciB4LF8seSx2IGluIEMoYilpZiB2XTtxPVt0LnBvcCgpXQogd2hpbGUgcToKICB4LHk9cS5wb3AoMCkKICBmb3IgVCxIIGluIE86CiAgIGlmKEU6PSh4K1QseStIKSlpbiB0OnErPUUsO3QucmVtb3ZlKEUpCiBpZltdPT10OnJldHVybiBiCmRlZiBmKGIpOgogcSwqcz1bYl0sCiB3aGlsZSBxOgogIGIsUj1xLnBvcCgwKSwxCiAgZm9yIHgscix5LHYgaW4gQyhiKToKICAgaWYgdiBhbmQoSChyLHYpPjFvciBIKFsqWyp6aXAoKmIpXVt5XV0sdik+MSlhbmQoUjo9MCk8YWxsKGJbeCtUXVt5K0hdZm9yIFQsSCBpbiBPIGlmIGxlbihiKT54K1Q+LTE8eStIPGxlbihyKSlhbmQoSzo9SShiLHgseSxzKSk6cSs9Syw7cys9SywKICBpZiBSOnJldHVybiBiCiAgCnMxID0gJycnCjIgMiAyIDQKMSA0IDIgMwoyIDMgMiAxCjMgNCAxIDIKJycnCnMyID0gJycnCjQgMiA0IDMKNCAxIDEgMgozIDEgMiAxCjQgMyAxIDMKJycnCnMzID0gJycnCjEgNSAzIDEgMgo1IDQgMSAzIDQKMyA0IDMgMSA1CjQgNCAyIDMgMwoyIDEgNSA0IDQKJycnCmRlZiB0b19ib2FyZChvX2IpOgoJcmV0dXJuIFtbKm1hcChpbnQsIGkuc3BsaXQoKSldZm9yIGkgaW4gZmlsdGVyKE5vbmUsIG9fYi5zcGxpdCgnXG4nKSldCgpwcmludChmKHRvX2JvYXJkKHMxKSkpCnByaW50KGYodG9fYm9hcmQoczIpKSkKcHJpbnQoZih0b19ib2FyZChzMykpKQ==
[[0, 2, 0, 4], [1, 4, 2, 3], [2, 3, 0, 1], [3, 0, 1, 2]]
[[0, 2, 4, 3], [4, 1, 0, 2], [3, 0, 2, 1], [0, 3, 1, 0]]
[[1, 5, 3, 0, 2], [5, 0, 1, 3, 4], [3, 4, 0, 1, 5], [4, 0, 2, 0, 3], [2, 1, 5, 4, 0]]