#include using namespace std; using LL = long long; using ULL = unsigned long long; #define rep(i,n) for(int i=0; i<(n); i++) const ULL M = 1000000007; ULL powm(ULL a,ULL i){ ULL r=1; while(i){ if(i%2) r=r*a%M; a=a*a%M; i/=2; } return r; } ULL invm(ULL a){ return powm(a,M-2); } int N; ULL A[200000]; int main() { scanf("%d",&N); rep(i,N){ int a; scanf("%d",&a); A[i]=a; if(a==0){ printf("0\n"); return 0; } } int p=0; ULL prod=1, prodprod=1, ans=1; rep(q,N){ prod*=A[q]; prodprod=prodprod*powm(A[q],q-p+1)%M; while(prod>=1000000000){ prodprod=prodprod*invm(prod%M)%M; prod/=A[p]; p++; } ans=ans*prodprod%M; } printf("%llu\n",ans); return 0; }