#include <bits/stdc++.h>
#define FI(i,a,b) for(int i=(a);i<=(b);i++)
#define FD(i,a,b) for(int i=(a);i>=(b);i--)
#define LL long long
#define Ldouble long double
#define PI 3.1415926535897932384626
#define PII pair<int,int>
#define PLL pair<LL,LL>
#define mp make_pair
#define fi first
#define se second
using namespace std;
#define mod 1000000007
int n, s[100005], cur = -1;
int res = 1;
int main(){
scanf("%d", &n);
FI(i, 1, n){
int x;
scanf("%d", &x);
if(x - cur >= 2){
cur += 2;
s[i] = cur;
}
else{
cur = s[i] = x;
}
}
// FI(i, 1, n) printf("%d%c", s[i], i == n ? '\n':' ');
int p = n;
FI(i, 1, n) if(s[i] <= (i - 1) * 2){
p = i;
break;
}
FI(i, 1, n){
// printf("i = %d: current # choice = %d\n", i, p);
res = 1LL * res * (p - i + 1) % mod;
while(p < n && s[p] > (p - i - 1) * 2) p++;
}
printf("%d\n", res);
return 0;
}