E= enumerate
def f( n, k, h) :
m, o, c, r, I= [ [ ] , [ ] ] , [ [ ] , [ ] ] , 0 , [ -1 , -1 ] , [ [ ] , [ ] ]
while ( -1 in r) *h:
C= c%2 ; H= h.pop ( 0 ) ; V= [ i for i, a in E( H) if a== H[ k] and ( i in I[ C] ) < ( m[ C] == [ ] or i in m[ C] ) ] ; I[ C] += [ i for i in m[ C] if ~ -( i in V) ] ; m[ C] = V; d= { } ; P= 1 -C; F= 1 ; A= -r[ C] == len ( m[ C] ) == 1
for i, a in E( H) :d[ a] = d.get ( a, [ ] ) +[ i]
if-1 == r[ P] :o[ P] = [ *d.values ( ) ]
if A:r[ C] = c+1
while F:
F= 0
if A:
for i in o[ 1 -P] :
if len ( i) == 1 == len ( K:= [ J for j in o[ P] if ( J:= [ u for u in j if u-i[ 0 ] and u in m[ P] ] ) and len ( J) == 1 ] ) :m[ P] = K[ 0 ]
if len ( K:= [ J for j in o[ P] if len ( J:= [ u for u in j if u in m[ P] ] ) == 1 ] ) == 1 :m[ P] = K[ 0 ]
else :
for i in o[ P] :
if len ( i) == 1 :
m[ P] = [ j for j in m[ P] if j-i[ 0 ] ] ; I[ P] += i
if ( N:= [ J for j in o[ 1 -P] if ( J:= [ u for u in j if u-i[ 0 ] ] ) ] ) != o[ 1 -P] :o[ ( P:= 1 -P) ] = N; F= 1
for i, a in E( m) :
if-r[ i] == len ( a) == 1 :r[ i] = c+1 ; F= A= 1 ; P= 1 > i
c+= 1
return r
print ( f( 5 , 0 , [ [ 1 , 1 , 2 , 2 , 2 ] , [ 1 , 2 , 1 , 1 , 1 ] , [ 0 , 0 , 0 , 0 , 0 ] ] ) ) #[2, 2]
print ( f( 2 , 1 , [ [ 0 , 1 ] , [ 1 , 1 ] , [ 0 , 0 ] , [ 1 , 0 ] ] ) ) #[1, 4]
print ( f( 3 , 1 , [ [ 0 , 1 , 1 ] , [ 0 , 1 , 1 ] , [ 1 , 2 , 2 ] ] ) ) #[-1, -1]
print ( f( 5 , 2 , [ [ 1 , 1 , 2 , 2 , 2 ] , [ 1 , 1 , 1 , 2 , 2 ] , [ 1 , 1 , 3 , 1 , 2 ] ] ) ) #[3, 3]
print ( f( 4 , 2 , [ [ 0 , 1 , 2 , 3 ] , [ 0 , 0 , 0 , 0 ] , [ 0 , 0 , 0 , 0 ] ] ) ) #[1, -1]
print ( f( 6 , 5 , [ [ 0 , 1 , 1 , 1 , 1 , 1 ] , [ 1 , 0 , 1 , 1 , 1 , 1 ] , [ 1 , 1 , 0 , 1 , 1 , 1 ] , [ 1 , 1 , 1 , 0 , 1 , 1 ] , [ 1 , 1 , 1 , 1 , 0 , 1 ] ] ) ) #[5, -1]
print ( f( 5 , 2 , [ [ 1 , 1 , 2 , 2 , 2 ] , [ 1 , 2 , 2 , 3 , 3 ] ] ) ) #[2, 2]
RT1lbnVtZXJhdGUKZGVmIGYobixrLGgpOgogbSxvLGMscixJPVtbXSxbXV0sW1tdLFtdXSwwLFstMSwtMV0sW1tdLFtdXQogd2hpbGUoLTEgaW4gcikqaDoKICBDPWMlMjtIPWgucG9wKDApO1Y9W2kgZm9yIGksYSBpbiBFKEgpaWYgYT09SFtrXWFuZChpIGluIElbQ10pPChtW0NdPT1bXW9yIGkgaW4gbVtDXSldO0lbQ10rPVtpIGZvciBpIGluIG1bQ11pZn4tKGkgaW4gVildO21bQ109VjtkPXt9O1A9MS1DO0Y9MTtBPS1yW0NdPT1sZW4obVtDXSk9PTEKICBmb3IgaSxhIGluIEUoSCk6ZFthXT1kLmdldChhLFtdKStbaV0KICBpZi0xPT1yW1BdOm9bUF09WypkLnZhbHVlcygpXQogIGlmIEE6cltDXT1jKzEKICB3aGlsZSBGOgogICBGPTAKICAgaWYgQToKICAgIGZvciBpIGluIG9bMS1QXToKICAgICBpZiBsZW4oaSk9PTE9PWxlbihLOj1bSiBmb3IgaiBpbiBvW1BdaWYoSjo9W3UgZm9yIHUgaW4gaiBpZiB1LWlbMF1hbmQgdSBpbiBtW1BdXSlhbmQgbGVuKEopPT0xXSk6bVtQXT1LWzBdCiAgICBpZiBsZW4oSzo9W0ogZm9yIGogaW4gb1tQXWlmIGxlbihKOj1bdSBmb3IgdSBpbiBqIGlmIHUgaW4gbVtQXV0pPT0xXSk9PTE6bVtQXT1LWzBdCiAgIGVsc2U6CiAgICBmb3IgaSBpbiBvW1BdOgogICAgIGlmIGxlbihpKT09MToKICAgICAgbVtQXT1baiBmb3IgaiBpbiBtW1BdaWYgai1pWzBdXTtJW1BdKz1pCiAgICAgIGlmKE46PVtKIGZvciBqIGluIG9bMS1QXWlmKEo6PVt1IGZvciB1IGluIGogaWYgdS1pWzBdXSldKSE9b1sxLVBdOm9bKFA6PTEtUCldPU47Rj0xCiAgIGZvciBpLGEgaW4gRShtKToKICAgIGlmLXJbaV09PWxlbihhKT09MTpyW2ldPWMrMTtGPUE9MTtQPTE+aQogIGMrPTEKIHJldHVybiByCiAKcHJpbnQoZig1LDAsW1sxLCAxLCAyLCAyLCAyXSwgWzEsIDIsIDEsIDEsIDFdLCBbMCwgMCwgMCwgMCwgMF1dKSkgI1syLCAyXQpwcmludChmKDIsMSxbWzAsIDFdLCBbMSwgMV0sIFswLCAwXSwgWzEsIDBdXSkpICNbMSwgNF0KcHJpbnQoZigzLDEsW1swLCAxLCAxXSwgWzAsIDEsIDFdLCBbMSwgMiwgMl1dKSkgI1stMSwgLTFdCnByaW50KGYoNSwyLFtbMSwgMSwgMiwgMiwgMl0sIFsxLCAxLCAxLCAyLCAyXSwgWzEsIDEsIDMsIDEsIDJdXSkpICNbMywgM10KcHJpbnQoZig0LDIsW1swLCAxLCAyLCAzXSwgWzAsIDAsIDAsIDBdLCBbMCwgMCwgMCwgMF1dKSkgI1sxLCAtMV0KcHJpbnQoZig2LDUsW1swLCAxLCAxLCAxLCAxLCAxXSwgWzEsIDAsIDEsIDEsIDEsIDFdLCBbMSwgMSwgMCwgMSwgMSwgMV0sIFsxLCAxLCAxLCAwLCAxLCAxXSwgWzEsIDEsIDEsIDEsIDAsIDFdXSkpICNbNSwgLTFdCnByaW50KGYoNSwyLFtbMSwgMSwgMiwgMiwgMl0sIFsxLCAyLCAyLCAzLCAzXV0pKSAjWzIsIDJd