#include <bits/stdc++.h>
#define syosu(x) fixed<<setprecision(x)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> P;
typedef pair<double,double> pdd;
typedef pair<ll,ll> pll;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef vector<double> vd;
typedef vector<vd> vvd;
typedef vector<ll> vl;
typedef vector<vl> vvl;
typedef vector<string> vs;
typedef vector<P> vp;
typedef vector<vp> vvp;
typedef vector<pll> vpll;
typedef pair<P,int> pip;
typedef vector<pip> vip;
const int inf=1<<30;
const ll INF=1ll<<60;
const double pi=acos(-1);
const double eps=1e-8;
const ll mod=1e9+7;
const int dx[4]={-1,0,1,0},dy[4]={0,-1,0,1};

bool Is_Prime(ll n){
	for(int i=2;i*i<=n;i++){
		if(n%i==0) return 0;
	}
	return n!=1;
}

int n;
vi a,b;

int main(){
	cin>>n;
	a=b=vi(n);
	for(int i=0;i<n;i++){
		cin>>a[i];
		b[i]=Is_Prime(a[i]);
	}
	vi dp0(n),dp1(n);
	if(b[0]) dp0[0]++;
	if(n>=2&&b[0]) dp1[1]++;
	for(int i=1;i<n;i++){
		if(b[i]){
			if(i-2>=0&&b[i-2]&&a[i-2]<a[i]) (dp0[i]+=dp1[i-1])%=mod;
			if(b[i-1]&&a[i-1]<a[i]) (dp0[i]+=dp0[i-1])%=mod;
		}
		if(b[i-1]){
			if(i-2>=0&&b[i-2]&&a[i-2]<a[i-1]) (dp1[i]+=dp0[i-2])%=mod;
			if(i-3>=0&&b[i-3]&&a[i-3]<a[i-1]) (dp1[i]+=dp1[i-2])%=mod;
		}
	}
	cout<<(dp0[n-1]+dp1[n-1])%mod<<endl;
}
