#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
long long n, a[200005], num[200005], tk[200005], os[200005][3], ans = 1;
vector<int> v;
long long pw(long long x, long long y) {
  if (y == 1) return x;
  if (y == 0) return 0;
  long long ans = 1;
  long long gt = pw(x, y / 2);
  ans *= gt;
  ans %= mod;
  ans *= gt;
  ans %= mod;
  if (y % 2) {
    ans *= x;
    ans %= mod;
  }
  return ans;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> a[i];
    num[a[i]]++;
    if (tk[a[i]]) continue;
    tk[a[i]] = 1;
    v.push_back(a[i]);
  }
  os[0][0] = num[v[0]] + 1;
  for (int i = 1; i < v.size(); i++) {
    os[i][0] = os[i - 1][0] * (num[v[i]] + 1);
    os[i][0] %= mod - 1;
  }
  os[v.size() - 1][1] = num[v[v.size() - 1]] + 1;
  for (int i = v.size() - 2; i >= 0; i--) {
    os[i][1] = os[i + 1][1] * (num[v[i]] + 1);
    os[i][1] %= mod - 1;
  }
  os[-1][0] = 1;
  os[v.size()][1] = 1;
  for (int i = 0; i < v.size(); i++) {
    for (int j = 1; j <= num[v[i]]; j++) {
      ans *= pw(pw(v[i], j), (os[i - 1][0] * os[i + 1][1]) % (mod - 1));
      ans %= mod;
    }
  }
  cout << ans;
}
