Калькулятор с восствновлением ответа n = int(input()) L = [0] * (n + 1) for i in range(2, n + 1): L[i] = L[i - 1] if i % 2 == 0 and L[i // 2] < L[i]: L[i] = L[i // 2] if i % 3 == 0 and L[i // 3] < L[i]: L[i] = L[i // 3] L[i] += 1 ans = '' i = n while i > 1: if L[i - 1] == L[i] - 1: i -= 1 ans += '1' elif i % 2 == 0 and L[i // 2] == L[i] - 1: i //= 2 ans += '2' else: i //= 3 ans += '3' print(ans[::-1]) Граф, но не Монте-Кисто n, m = map(int, input().split()) L = [[i] for i in range(n)] for i in range(m): a, b = input().split() a = ord(a) - 65 b = ord(b) - 65 L[a].append(b) dp = [0 for i in range(n)] dp[0] = 1 for i in range(n): for j in range(1, len(L[i])): dp[L[i][j]] += dp[i] print(dp[-1])