#include<bits/stdc++.h>
using namespace std;
#define int long long
namespace mathmech{
int binpow(int k,int n){
int res=1;
while(n){
if(n&1)res*=k;
k*=k;
n>>=1;
}
return res;
}
int modpow(int k,int n,int mod){
int res=1;
while(n){
if(n&1)res=res*k%mod;
k=k*k%mod;
n>>=1;
}
return res%mod;
}
int phi(int n){
int ans=n;
for(int i=2;i*i<=n;i++)
if(n%i==0){
ans=ans/i*(i-1);
while(n%i==0)n/=i;
}
if(n>1)ans=ans/n*(n-1);
return ans;
}
int exgcd(int a,int b,int& x,int& y){
if(b>a)return exgcd(b,a,x,y);
if(b==0){
x=1;y=0;
return a;
}else{
int x1;
int d=exgcd(b,a%b,x1,x);
y=x1-a/b*x;
return d;
}
}
int CRT(int k,int*a,int*r){
int n=1,ans=0;
for(int i=1;i<=k;i++)n*=r[i];
for(int i=1;i<=k;i++){
int m=n/r[i],b,y;
exgcd(m,r[i],b,y);
ans=(ans+a[i]*m*b%n)%n;
}
return ans%n?(ans%n+n)%n:n;
}
inline int read(){int x=0,f=1;char c=getchar();while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}
while(isdigit(c)){x=(x<<3)+(x<<1)+c-'0';c=getchar();}return x*f;}
void Write(int x){if(x<0){x=-x;putchar('-');}if(x){Write(x/10);putchar(x%10+'0');}}
void write(int x){Write(x);putchar('\n');}
}
using namespace mathmech;
int a[1234569],n;
const int mod=10007,fai=10006;
int solve(int k){
if(k==n){
if(a[n]<=fai)return a[n];
else return a[n]%fai;
}
int v=solve(k+1);
return modpow(a[k],v,fai);
}
signed main(){
n=read();
for(int i=1;i<=n;i++)
cin>>a[i];
cout<<modpow(a[1],solve(2),mod);
return 0;
}