f= \
lambda b:next( C( b) , 0 ) != 0
R, T, U= range , sorted , lambda x:'' .join ( map ( str , x) ) .lstrip ( '0' )
Z= zip
def C( b) :
q, S= [ ( [ ] , 0 ) ] , [ ]
while q:
r, c= q.pop ( 0 ) ; L= len ( b)
if all ( a== sum ( j) for a, j in Z( b, Z( *r) ) ) *r:yield r
if c== L:1
elif b[ c] :
for i in { *R( 1 , b[ c] +1 ) } -{ j for k in r for j in k} :
for g in R( 1 , L+1 ) :
k= [ 0 ] *L; k[ c] = i; I= 1
while I*g+c< L or c>= I*g:
if c>= I*g:k[ c-I*g] = i
if I*g+c< L:k[ I*g+c] = i
I+= 1
if all ( a>= sum ( j) for a, j in Z( b, Z( *r+[ k] ) ) ) > any ( all ( j== K for j, K in Z( U( i) , U( k) ) ) for i in r) == ( T( r+[ k] ) in S) :q+= ( K:= r+[ k] , c+1 ) ,; S+= T( K) ,; q+= ( b[ c] > sum ( j[ c] for j in K) ) *[ ( K, c) ]
else :q+= ( r, c+1 ) ,
print ( f( [ 0 , 1 , 1 , 0 , 1 , 1 , 0 , 1 , 1 , 0 ] ) )
print ( f( [ 0 , 1 , 1 ] ) )
print ( f( [ 1 , 1 , 2 ] ) )
print ( f( [ 2 , 9 , 2 , 6 , 1 ] ) )
#print(f([9,2,8,7,3,6,1,1]))
#print(f([9,10,7,3,8,8,2,2])) Times out
print ( '-' *20 )
print ( f( [ 9 ] ) )
print ( f( [ 9 , 9 ] ) )
print ( f( [ 9 , 9 , 9 ] ) )
print ( f( [ 9 , 9 , 9 , 9 ] ) )
print ( f( [ 0 , 3 , 3 ] ) )
print ( f( [ 3 , 1 , 1 ] ) )
print ( f( [ 0 , 3 , 3 , 0 , 3 , 3 , 0 , 3 , 3 , 0 ] ) )
print ( f( [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ] ) )
#print(f([9,9,9,9,9,9,9,9,1]))
#print(f([5,7,5,3,9,4,5,7]))
Zj1cCmxhbWJkYSBiOm5leHQoQyhiKSwwKSE9MApSLFQsVT1yYW5nZSxzb3J0ZWQsbGFtYmRhIHg6Jycuam9pbihtYXAoc3RyLHgpKS5sc3RyaXAoJzAnKQpaPXppcApkZWYgQyhiKToKIHEsUz1bKFtdLDApXSxbXQogd2hpbGUgcToKICByLGM9cS5wb3AoMCk7TD1sZW4oYikKICBpZiBhbGwoYT09c3VtKGopZm9yIGEsaiBpbiBaKGIsWigqcikpKSpyOnlpZWxkIHIKICBpZiBjPT1MOjEKICBlbGlmIGJbY106CiAgIGZvciBpIGlueypSKDEsYltjXSsxKX0te2ogZm9yIGsgaW4gciBmb3IgaiBpbiBrfToKICAgIGZvciBnIGluIFIoMSxMKzEpOgogICAgIGs9WzBdKkw7a1tjXT1pO0k9MQogICAgIHdoaWxlIEkqZytjPEwgb3IgYz49SSpnOgogICAgICBpZiBjPj1JKmc6a1tjLUkqZ109aQogICAgICBpZiBJKmcrYzxMOmtbSSpnK2NdPWkKICAgICAgSSs9MQogICAgIGlmIGFsbChhPj1zdW0oailmb3IgYSxqIGluIFooYixaKCpyK1trXSkpKT5hbnkoYWxsKGo9PUsgZm9yIGosSyBpbiBaKFUoaSksVShrKSkpZm9yIGkgaW4gcik9PShUKHIrW2tdKWluIFMpOnErPShLOj1yK1trXSxjKzEpLDtTKz1UKEspLDtxKz0oYltjXT5zdW0oaltjXWZvciBqIGluIEspKSpbKEssYyldCiAgZWxzZTpxKz0ocixjKzEpLAogIApwcmludChmKFswLDEsMSwwLDEsMSwwLDEsMSwwXSkpCnByaW50KGYoWzAsMSwxXSkpCnByaW50KGYoWzEsMSwyXSkpCnByaW50KGYoWzIsOSwyLDYsMV0pKQojcHJpbnQoZihbOSwyLDgsNywzLDYsMSwxXSkpCiNwcmludChmKFs5LDEwLDcsMyw4LDgsMiwyXSkpIFRpbWVzIG91dApwcmludCgnLScqMjApCnByaW50KGYoWzldKSkKcHJpbnQoZihbOSw5XSkpCnByaW50KGYoWzksOSw5XSkpCnByaW50KGYoWzksOSw5LDldKSkKcHJpbnQoZihbMCwzLDNdKSkKcHJpbnQoZihbMywxLDFdKSkKcHJpbnQoZihbMCwzLDMsMCwzLDMsMCwzLDMsMF0pKQpwcmludChmKFsxLDIsMyw0LDUsNiw3LDhdKSkKI3ByaW50KGYoWzksOSw5LDksOSw5LDksOSwxXSkpCiNwcmludChmKFs1LDcsNSwzLDksNCw1LDddKSk=