#include <bits/stdc++.h>
#define mod 10007
#define i128 __int128
using namespace std;
i128 a, m, b, P;
bool f;
inline i128 read()
{
i128 r = 0, w = 1;
char c = getchar();
while(c < '0' || c > '9')
{
if(c == '-') w = -1;
c = getchar();
}
while(c >= '0' && c <= '9')
{
r = (r << 3) + (r << 1) + (c ^ 48);
c = getchar();
}
return r * w;
}
inline i128 _read()
{
i128 r = 0, w = 1;
char c = getchar();
while(c < '0' || c > '9')
{
if(c == '-') w = -1;
c = getchar();
}
while(c >= '0' && c <= '9')
{
r = ((r << 3) % P) + ((r << 1) % P) + (c ^ 48);
if(r >= P) f = 1;
r %= P;
c = getchar();
}
return r * w;
}
i128 phi(i128 x)//预处理欧拉函数
{
i128 res = x;
for (i128 i = 2;i * i <= x;i ++)
{
if (x % i == 0)
{
res -= (res / i);
while(x % i == 0)
{
x /= i;
}
}
}
if(x > 1) return res -= (res / x);
return res;
}
void print(i128 x) {
if (!x) return;
print(x / 10);
std::putchar(x % 10 + '0');
}
i128 fastpow(i128 a, i128 y)
{
i128 res = 1;
while(y)
{
if(y & 1) res = (res * a) % mod, res = (res + mod) % mod;
a = (a * a) % mod;
y >>= 1;
}
return res % mod;
}
int main()
{
int n;
cin >> n;
P = phi(mod);
//P = mod;
a = _read();if(f == 1) a += P;
f = 0;
b = _read();
if(f == 1) b += P;
i128 k = fastpow(a, b) % mod;
for (int i = 3;i <= n; ++ i)
{
f = 0;
b = _read();
if(f == 1) b += P;
k = fastpow(k, b) % mod;
}
if(k == 0)
{
cout << 0 << "\n";
}
else
{
print(k);
}
}