#include <bits/stdc++.h>
#define REP(i, a, n) for(ll i = ((ll) a); i < ((ll) n); i++)
using namespace std;
typedef long long ll;

const ll MOD = 1000000007LL;

int main(void) {
  ll N;
  cin >> N;
  vector<ll> P(N);
  REP(i, 0, N) cin >> P[i];

  const ll PMAX = 1000001;
  vector<bool> prime(PMAX, true);
  prime[1] = false;
  REP(i, 2, PMAX) if(prime[i]) for(ll j = i + i; j < PMAX; j += i) prime[j] = false;

  vector<ll> dp1(N, 0), dp2(N, 0);
  REP(i, 0, N) {
    if(i == 0) {
      if(prime[P[i]]) (dp1[i] += 1) %= MOD;
    } else if(i == 1) {
      if(prime[P[i]] && P[i - 1] < P[i]) (dp1[i] += dp1[i - 1]) %= MOD;
      if(prime[P[i - 1]]) (dp2[i] += 1) %= MOD;
    } else if(i == 2) {
      if(prime[P[i]] && P[i - 1] < P[i]) (dp1[i] += dp1[i - 1]) %= MOD;
      if(prime[P[i]] && P[i - 2] < P[i]) (dp1[i] += dp2[i - 1]) %= MOD;
      if(prime[P[i - 1]] && P[i - 2] < P[i - 1]) (dp2[i] += dp1[i - 2]) %= MOD;
    } else {
      if(prime[P[i]] && P[i - 1] < P[i]) (dp1[i] += dp1[i - 1]) %= MOD;
      if(prime[P[i]] && P[i - 2] < P[i]) (dp1[i] += dp2[i - 1]) %= MOD;
      if(prime[P[i - 1]] && P[i - 2] < P[i - 1]) (dp2[i] += dp1[i - 2]) %= MOD;
      if(prime[P[i - 1]] && P[i - 3] < P[i - 1]) (dp2[i] += dp2[i - 2]) %= MOD;
    }
  }
  cout << (dp1[N - 1] + dp2[N - 1]) % MOD << endl;
}

