Загрузка данных


import sys
from collections import deque

def solve():
    data = sys.stdin.read().split()
    n = int(data[0])
    a = [int(data[i + 1]) for i in range(n)]

    MOD = 1000000007
    INF = float('inf')

    dist = [INF] * n
    count = [0] * n

    dist[0] = 0
    count[0] = 1

    queue = deque([0])

    while queue:
        u = queue.popleft()
        current_dist = dist[u]
        max_reach = min(u + a[u], n - 1)

        for v in range(u + 1, max_reach + 1):
            if dist[v] == INF:
                dist[v] = current_dist + 1
                count[v] = count[u]
                queue.append(v)
            elif dist[v] == current_dist + 1:
                count[v] = (count[v] + count[u]) % MOD

    if dist[n - 1] == INF:
        print(-1)
    else:
        print(count[n - 1] % MOD)

solve()