from random import randint
from time import time
m = 10 ** 9 + 7
t = time()
for _ in xrange(3):
n = 1000
B = [randint(1, 1000) for i in xrange(n)]#map(int, raw_input().split())
dp = [[0 for i in xrange(n + 1)] for j in xrange(n)]
cdp = [[0 for i in xrange(n + 1)] for j in xrange(n)]
dp[0][1] = 1
cdp[0][1] = 1
cdp[0][0] = 1
for i in xrange(1, n):
for j in xrange(1, min(n + 1, B[i] + 1)):
dp[i][j] = cdp[i - 1][j - 1] % m
cdp[i][n] = dp[i][n]
for j in xrange(n - 1, -1, -1):
cdp[i][j] = (cdp[i][j + 1] + dp[i][j])% m
print cdp[-1][0], time() - t
ZnJvbSByYW5kb20gaW1wb3J0IHJhbmRpbnQKZnJvbSB0aW1lIGltcG9ydCB0aW1lCm0gPSAxMCAqKiA5ICsgNwp0ID0gdGltZSgpCmZvciBfIGluIHhyYW5nZSgzKToKICAgIG4gPSAxMDAwCiAgICBCID0gW3JhbmRpbnQoMSwgMTAwMCkgZm9yIGkgaW4geHJhbmdlKG4pXSNtYXAoaW50LCByYXdfaW5wdXQoKS5zcGxpdCgpKQogICAgZHAgPSBbWzAgZm9yIGkgaW4geHJhbmdlKG4gKyAxKV0gZm9yIGogaW4geHJhbmdlKG4pXQogICAgY2RwID0gW1swIGZvciBpIGluIHhyYW5nZShuICsgMSldIGZvciBqIGluIHhyYW5nZShuKV0KICAgIGRwWzBdWzFdID0gMQogICAgY2RwWzBdWzFdID0gMQogICAgY2RwWzBdWzBdID0gMQogICAgZm9yIGkgaW4geHJhbmdlKDEsIG4pOgogICAgICAgIGZvciBqIGluIHhyYW5nZSgxLCBtaW4obiArIDEsIEJbaV0gKyAxKSk6CiAgICAgICAgICAgIGRwW2ldW2pdID0gY2RwW2kgLSAxXVtqIC0gMV0gJSBtCiAgICAgICAgY2RwW2ldW25dID0gZHBbaV1bbl0KICAgICAgICBmb3IgaiBpbiB4cmFuZ2UobiAtIDEsIC0xLCAtMSk6CiAgICAgICAgICAgIGNkcFtpXVtqXSA9IChjZHBbaV1baiArIDFdICsgZHBbaV1bal0pJSBtCiAgICBwcmludCBjZHBbLTFdWzBdLCB0aW1lKCkgLSB0Cg==