N=int(input()) A=list(map(int,input().split())) mod=10**9+7 if 0 in A: print(0) exit() data=[0]*(N+1) s=0 t=1 val=A[0] while N>s and N>t: test=val*A[t] if 10**9>test: val=test t+=1 else: data[s]+=1 data[t]+=-1 if s!=0: data[s-1]-=(t-s) data[s]+=(t-s) val//=A[s] s+=1 while N>s: data[s]+=1 data[t]+=-1 if s!=0: data[s-1]-=(t-s) data[s]+=(t-s) s+=1 for i in range(1,N): data[i]+=data[i-1] for i in range(N-2,-1,-1): data[i]+=data[i+1] ans=1 for i in range(N): ans*=pow(A[i],data[i],mod) ans%=mod print(ans)