def solve(S, X):
X -= 1 # 1-origin to 0-origin
S += "0"
blocklen = [0]
unitlen = [0]
repeat = [0]
tailstart = [0]
taillen = [0]
tlen = 0
tstart = 0
for i, c in enumerate(S):
if c in "0123456789":
rep = int(c) + 1
repeat.append(rep)
tailstart.append(tstart)
taillen.append(tlen)
unitlen.append(blocklen[-1] + tlen)
blocklen.append(unitlen[-1] * rep)
if blocklen[-1] > X:
break
# next tail
tstart = i + 1
tlen = 0
else:
tlen += 1
for i in reversed(range(len(blocklen))):
X %= unitlen[i]
if X >= blocklen[i - 1]:
X -= blocklen[i - 1]
return S[tailstart[i] + X]