#include <bits/stdc++.h>
using namespace std;
#define FOR(i,a,b) for (int i = (a); i < (b); ++i)
#define FORD(i,b,a) for (int i = (int)(b) - 1; i >= a; --i)
#define REP(i,N) FOR(i,0,N)
#define st first
#define nd second
#define pb push_back
typedef pair<int, int> PII;
typedef long long LL;
const int MOD = 1000000007;
int DP[111111]; // Najdluzszy
int X[111111];
int minp[111111];
int main() {
int N;
scanf("%d", &N);
REP(i,N) scanf("%d", &X[i]);
DP[0] = 1;
FOR(i,1,N) DP[i] = min(DP[i-1] + 1, (X[i] + 1) / 2);
int last = 1;
LL res = 1;
REP(i,N) {
while (last < N && last - DP[last-1] <= i) ++last;
res *= (last - i);
res %= MOD;
}
printf("%lld\n", res);
}