if N(p:={(J:=k-j*~y,X:=~j*~y+k),(J+1,X+1),(J,J+1),(X,X+1)}-{*r})>=b[j][k]:
for i in combinations(p,b[j][k]):
T=p-{*i}
if~-any(q in n for q in T):
E=eval(str(e))
for A,B in T:E[A].remove(B);E[B].remove(A)
ifall(N(E[A])>1for A in E):yieldfrom O(b,s[1:],E,x,y,n+[*i],r+[*T])
def f(x,y,d,t=' '):
while1:
s=[0]*(x*y-(L:=x*y*d//20))+[randint(1,3)for _ in R(L)];shuffle(s);b=[s[i:i+y]for i in R(0,N(s),y)];k=-1;B=[[(k:=k+1)for _ in R(y+1)]for _ in R(x+1)];D={};T=t.join
def U(B,x,y,X,Y):
try:D[B[x][y]]=D.get(B[x][y],[])+[B[X][Y]]
except:1
for Z in R(~y*~x):U(B,X:=Z//-~x,Y:=Z%-~x,X,Y+1);U(B,X,Y,X+1,Y);U(B,X,Y+1,X,Y);U(B,X+1,Y,X,Y)
if O(b,[(X//y,X%y)for X in R(x*y)if b[X//y][X%y]],D,x,y):return'\n'.join([T(['+']*N(H))+'\n '+T([t,str(u)][u>0]for u in G)for H,G inzip(B,b)]+[T(['+']*N(B[0]))])