mod=10**9+7 n=int(input()) arr=list(map(int,input().split())) if 0 in arr: print(0) exit() rs=[-1]*n tmp=1 pos=0 for i in range(n): for j in range(max(i,pos),n): tmp*=arr[j] if tmp>=10**9: rs[i]=j pos=j tmp//=arr[j] break else: rs[i]=n pos=n tmp//=arr[i] imos1=[0]*(n+1) imos2=[0]*(n+1) for i in range(n): imos1[i]=rs[i]-i imos2[i+1]+=-1 if rs[i]+1<=n: imos2[rs[i]+1]+=1 for i in range(1,n+1): imos2[i]+=imos2[i-1] for i in range(n): imos1[i]+=imos2[i] for i in range(1,n+1): imos1[i]+=imos1[i-1] ans=1 for i in range(n): ans*=pow(arr[i],imos1[i],mod) ans%=mod print(ans)