Buggy python submission (verdict: Runtime Error):
import numpy as np

m = int(input())
cur_nums = np.zeros(10, dtype = np.int64)
for _ in range(m):
	d, c = list(map(int, input().split()))
	cur_nums[d] += c

nxt_nums = np.zeros(10, dtype = np.int64)

cnt = 0
while True:
	#print(cur_nums)
	nxt_nums = np.zeros(10, dtype = np.int64)
	# 0
	cnt += cur_nums[0] // 2
	nxt_nums[0] += cur_nums[0] // 2
	nxt_nums[0] += cur_nums[0] % 2
	# 1
	cnt += cur_nums[1] // 2
	nxt_nums[2] += cur_nums[1] // 2 
	nxt_nums[1] += cur_nums[1] % 2 
	# 2
	cnt += cur_nums[2] // 2
	nxt_nums[4] += cur_nums[2] // 2 
	nxt_nums[2] += cur_nums[2] % 2 
	# 3
	cnt += cur_nums[3] // 2
	nxt_nums[6] += cur_nums[3] // 2 
	nxt_nums[3] += cur_nums[3] % 2 
	# 4
	cnt += cur_nums[4] // 2
	nxt_nums[8] += cur_nums[4] // 2 
	nxt_nums[4] += cur_nums[4] % 2 
	# 5
	cnt += cur_nums[5] // 2
	nxt_nums[0] += cur_nums[5] // 2 
	nxt_nums[1] += cur_nums[5] // 2 
	nxt_nums[5] += cur_nums[5] % 2 
	# 6
	cnt += cur_nums[6] // 2
	nxt_nums[2] += cur_nums[6] // 2 
	nxt_nums[1] += cur_nums[6] // 2 
	nxt_nums[6] += cur_nums[6] % 2 
	# 7
	cnt += cur_nums[7] // 2
	nxt_nums[4] += cur_nums[7] // 2 
	nxt_nums[1] += cur_nums[7] // 2 
	nxt_nums[7] += cur_nums[7] % 2 
	# 8
	cnt += cur_nums[8] // 2
	nxt_nums[6] += cur_nums[8] // 2 
	nxt_nums[1] += cur_nums[8] // 2 
	nxt_nums[8] += cur_nums[8] % 2
	# 9
	cnt += cur_nums[8] // 2
	nxt_nums[8] += cur_nums[9] // 2 
	nxt_nums[1] += cur_nums[9] // 2 
	nxt_nums[9] += cur_nums[9] % 2  
	if (cur_nums == nxt_nums).all():
		break
	cur_nums = nxt_nums

rest = [i for i in range(10) if cur_nums[i] == 1]

while len(rest) >= 2:
	a = rest.pop()
	b = rest.pop()
	rest.extend(map(int, list(str(a + b))))
	cnt += 1

print(cnt)

Fixed submission:
import numpy as np

m = int(input())
cur_nums = np.zeros(10, dtype = np.int64)
for _ in range(m):
	d, c = list(map(int, input().split()))
	cur_nums[d] += c

nxt_nums = np.zeros(10, dtype = np.int64)

cnt = 0
while True:
	#print(cnt, cur_nums)
	nxt_nums = np.zeros(10, dtype = np.int64)
	# 0
	cnt += cur_nums[0] // 2
	nxt_nums[0] += cur_nums[0] // 2
	nxt_nums[0] += cur_nums[0] % 2
	# 1
	cnt += cur_nums[1] // 2
	nxt_nums[2] += cur_nums[1] // 2 
	nxt_nums[1] += cur_nums[1] % 2 
	# 2
	cnt += cur_nums[2] // 2
	nxt_nums[4] += cur_nums[2] // 2 
	nxt_nums[2] += cur_nums[2] % 2 
	# 3
	cnt += cur_nums[3] // 2
	nxt_nums[6] += cur_nums[3] // 2 
	nxt_nums[3] += cur_nums[3] % 2 
	# 4
	cnt += cur_nums[4] // 2
	nxt_nums[8] += cur_nums[4] // 2 
	nxt_nums[4] += cur_nums[4] % 2 
	# 5
	cnt += cur_nums[5] // 2
	nxt_nums[0] += cur_nums[5] // 2 
	nxt_nums[1] += cur_nums[5] // 2 
	nxt_nums[5] += cur_nums[5] % 2 
	# 6
	cnt += cur_nums[6] // 2
	nxt_nums[2] += cur_nums[6] // 2 
	nxt_nums[1] += cur_nums[6] // 2 
	nxt_nums[6] += cur_nums[6] % 2 
	# 7
	cnt += cur_nums[7] // 2
	nxt_nums[4] += cur_nums[7] // 2 
	nxt_nums[1] += cur_nums[7] // 2 
	nxt_nums[7] += cur_nums[7] % 2 
	# 8
	cnt += cur_nums[8] // 2
	nxt_nums[6] += cur_nums[8] // 2 
	nxt_nums[1] += cur_nums[8] // 2 
	nxt_nums[8] += cur_nums[8] % 2
	# 9
	cnt += cur_nums[9] // 2
	nxt_nums[8] += cur_nums[9] // 2 
	nxt_nums[1] += cur_nums[9] // 2 
	nxt_nums[9] += cur_nums[9] % 2  
	if (cur_nums == nxt_nums).all():
		break
	cur_nums = nxt_nums

rest = [i for i in range(10) if cur_nums[i] == 1]

# cnt = 0
# rest = [9 for _ in range(900)]

while len(rest) >= 2:
	#print(cnt, rest)
	a = rest.pop()
	b = rest.pop()
	rest.extend(map(int, list(str(a + b))))
	cnt += 1

print(cnt)