def init(s) :
N = len(s)
L = [0]*N
loop = 0
for i, x in enumerate(list(s)):
if not x.isdigit() : continue
x = int(x)
loop += int((x-1)/N)
L[i] = 1 + (x-1)%N
return [loop,L]
def sushi(s):
[loop, L] = init(s)
N = len(L)
A = [0] *N
gap = max ([0] + [ i+L[i]-N for i in range(N) ])
for i in range(N):
for j in range(L[i]): A[(i+j)%N] += 1
maxi = max(A)
last = list(reversed(A)).index(maxi)
x = N * (maxi + loop)
if len(set(A))>1 : return max(x - last , x-N + gap)
return x + gap
PROBLEM = [
"33",
"1_3",
"123",
"12_3",
"313__",
"4_35_1264_23_434",
"123456789123456789",
"88967472612377988186",
"19898693316679441672",
"93769682716711132249893" ]
for s in PROBLEM: print(sushi(s), ":",s)
ZGVmIGluaXQocykgOiAKICBOID0gbGVuKHMpCiAgTCA9IFswXSpOCiAgbG9vcCA9IDAKICBmb3IgIGksIHggaW4gZW51bWVyYXRlKGxpc3QocykpOgogICAgaWYgbm90IHguaXNkaWdpdCgpIDogY29udGludWUKICAgIHggPSBpbnQoeCkKICAgIGxvb3AgKz0gaW50KCh4LTEpL04pCiAgICBMW2ldID0gMSArICh4LTEpJU4KICByZXR1cm4gW2xvb3AsTF0KCmRlZiBzdXNoaShzKToKICBbbG9vcCwgTF0gPSBpbml0KHMpCiAgTiA9IGxlbihMKQogIEEgPSBbMF0gKk4KICBnYXAgPSBtYXggKFswXSArIFsgaStMW2ldLU4gZm9yIGkgaW4gcmFuZ2UoTikgXSkKICBmb3IgaSBpbiByYW5nZShOKToKICAgIGZvciBqIGluIHJhbmdlKExbaV0pOiBBWyhpK2opJU5dICs9IDEKICBtYXhpID0gbWF4KEEpCiAgbGFzdCA9IGxpc3QocmV2ZXJzZWQoQSkpLmluZGV4KG1heGkpCiAgeCA9IE4gKiAobWF4aSAgKyBsb29wKQogIGlmIGxlbihzZXQoQSkpPjEgOiByZXR1cm4gbWF4KHggLSBsYXN0ICwgeC1OICsgZ2FwKQogIHJldHVybiB4ICsgZ2FwCgpQUk9CTEVNID0gWwoiMzMiLAoiMV8zIiwKIjEyMyIsCiIxMl8zIiwKIjMxM19fIiwKIjRfMzVfMTI2NF8yM180MzQiLAoiMTIzNDU2Nzg5MTIzNDU2Nzg5IiwKIjg4OTY3NDcyNjEyMzc3OTg4MTg2IiwKIjE5ODk4NjkzMzE2Njc5NDQxNjcyIiwKIjkzNzY5NjgyNzE2NzExMTMyMjQ5ODkzIiBdCgpmb3IgcyBpbiBQUk9CTEVNOiAgIHByaW50KHN1c2hpKHMpLCAiOiIscyk=