N = int(input()) A = [int(a) for a in input().split()] mod = 10**9+7 L = [0]*N l = 0 num = 1 for r in range(N): num *= A[r] if num < 10**9: L[l] += 1 if r < N-1: L[r+1] -= 1 continue while num >= 10**9 and l < r: num //= A[l] l += 1 L[l] += 1 if r < N-1: L[r+1] -= 1 for i in range(N-1): L[i+1] += L[i] if l > 0: L[l] += N-l-1 for i in range(l+1, N): L[i] += (i-l)*(N-i) ans = 1 for i in range(N): ans *= pow(A[i], L[i], mod) ans %= mod print(ans)