#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <cstring>
#include <queue>
#include <stack>
#include <functional>
#include <set>
#include <map>
#include <deque>
#define SIZE 100005
#define MOD 1000000007

using namespace std;
typedef long long int ll;

int pos[SIZE];
int main()
{
	int n;
	scanf("%d",&n);
	for(int i=0;i<n;i++) scanf("%d",&pos[i]);
	int to=0;
	ll ret=1;
	for(int i=0;i<n;i++)
	{
		while(to<n&&pos[to]>=2*(to-i+1)-1) to++;
		ret=ret*(ll) (min(n,to+1)-i)%MOD;
		//printf("%d\n",to);
	}
	printf("%lld\n",ret);
	return 0;
}
