import sys def game(stack1, stack2, rec=False, N=1): seen = set() key = None while stack1 and stack2: key = (tuple(stack1), tuple(stack2)) a, b = stack1.pop(), stack2.pop() if rec and key in seen: return 0 elif rec and a <= len(stack1) and b <= len(stack2): p2won = game(stack1[-a:], stack2[-b:], rec=rec, N=N + 1) else: p2won = b > a seen.add(key) winner = stack2 if p2won else stack1 order = [a, b] if p2won else [b, a] winner[:] = order + winner return sum(i * n for i, n in enumerate(winner, 1)) if N == 1 else p2won text = sys.stdin.read() p1, p2 = text.split('\n\n') stack1 = [int(n) for n in p1.splitlines()[1:]][::-1] stack2 = [int(n) for n in p2.splitlines()[1:]][::-1] print(game(stack1[:], stack2[:])) print(game(stack1[:], stack2[:], rec=True))