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()