#include <bits/stdc++.h>
using namespace std;
typedef __int128 ll;
const int maxn = 13e5 + 7;
ll read() {
ll x = 0, f = 1; char c = getchar();
while (c < '0' || c > '9') {if (f == '-') c = -1; c = getchar();}
while (c >= '0' && c <= '9') {x = (x << 3) + (x << 1) + (c ^ 48); c = getchar();}
return x * f;
}
void print(ll x) {
if (x > 9) print(x / 10);
putchar(x % 10 + 48);
}
int n, a[maxn];
bitset<21000> isp;
vector<int> prime;
int phi[21000];
void Euler() {
isp.set(), isp[0] = isp[1] = 0;
phi[1] = 1;
for (int i = 2; i <= 20007; ++i) {
if (isp[i]) {
prime.push_back(i);
phi[i] = i - 1;
}
for (int p : prime) {
if (i * p > 20007) continue;
isp[i * p] = 0;
if (i % p == 0) {
phi[i * p] = p * phi[i];
break;
}
phi[i * p] = phi[i] * phi[p];
}
}
}
ll qpow(ll x, ll y, ll mod) {
ll res = 1;
while (y > 0) {
if (y & 1) res = res * x % mod;
y >>= 1, x = x * x % mod + mod;
}
return res;
}
ll f(int idx, ll mod) {
if (idx == n + 1) return 1;
return qpow(a[idx], f(idx + 1, phi[mod]) + phi[mod], mod);
}
int main() {
Euler();
n = read();
for (int i = 1; i <= n; ++i)
a[i] = read();
ll ans = f(1, 10007);
print(ans);
return 0;
}