#include<iostream>
#include<string>
#include<cstdio>
#include<cstring>
#include<climits>
#include<bits/stdc++.h>
using namespace std;
#define mp make_pair
#define pb push_back
#define ll long long
#define VI vector<int>
#define PII pair<int,int>
#define VII vector<PII >
#define ft first
#define sd second
#define rz(v,n) v.resize(n)
#define VL vector<ll>
#define VLL vector<pair<ll,ll> >
#define PLL pair< ll,ll >
#define all(v) v.begin(),v.end()
#define IT iterator
// Input/Output
#define print(v) printf("%d\n",v)
#define printll(v) printf("%lld\n",v)
#define scan(v) scanf("%d",&v)
#define scanll(v) scanf("%lld",&v)
// loops
#define FOR(i,a,b) for(int i=a;i<b;i++)
#define rep(i,n) for(int i=0;i<n;i++)
//extra
#define ms(v,val) memset(v,val,sizeof(v))
#define fill(v,val) fill(all(v),val)
#define f_in(st) freopen(st,"r",stdin)
#define f_out(st) freopen(st,"w",stdout)
#define PIE 3.14159265358979323846264338327950
#define MOD 1000000007
#ifdef ONLINE_JUDGE
inline void inp( int &n )
{
n=0;
int ch=getchar_unlocked();int sign=1;
while( ch < '0' || ch > '9' ){if(ch=='-')sign=-1; ch=getchar_unlocked();}
while( ch >= '0' && ch <= '9' )
n = (n<<3)+(n<<1) + ch-'0', ch=getchar_unlocked();
n=n*sign;
}
#else
inline void inp(int &n){
cin>>n;
}
#endif
#define MAX 100001
int ST[4*MAX];
void update(int idx,int ss,int se,int index){
if(ss==se) {ST[idx]=1; return;}
int mid=(ss+se)>>1;
if(index<=mid) update(2*idx+1,ss,mid,index);
else update(2*idx+2,mid+1,se,index);
ST[idx]=ST[idx*2+1]+ST[2*idx+2];
}
int query_sum(int idx,int ss,int se,int l,int r){
if(ss>r||l>se) return 0;
if(l<=ss&&se<=r) return ST[idx];
int mid=(ss+se)>>1;
return query_sum(2*idx+1,ss,mid,l,r)+query_sum(2*idx+2,mid+1,se,l,r);
}
int query(int idx,int ss,int se,int index){
if(ss==se) return ss;
int mid=(ss+se)>>1;
if(ST[2*idx+1]>=index)
return query(2*idx+1,ss,mid,index);
return query(2*idx+2,mid+1,se,index-ST[2*idx+1]);
}
int main(){
// #ifndef ONLINE_JUDGE
// f_in("in.cpp");
//f_out("out.cpp");
// #endif
int t=1;
//inp(t);
while(t--){
int n; inp(n);
VLL A(n);
VL B(n);
int i;
FOR(i,0,n) scanll(A[i].ft),B[i]=A[i].ft,A[i].sd=i;
sort(all(A));
int sum,idx;
ll ans=1;
for(i=n-1;i>=0;i--){
sum=query_sum(0,0,n-1,A[i].sd,n-1);
if(sum){
sum=query_sum(0,0,n-1,0,A[i].sd);
ans=ans*(B[query(0,0,n-1,sum+1)]);
ans%=MOD;
}
update(0,0,n-1,A[i].sd);
}
printll(ans);
}
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPHN0cmluZz4KI2luY2x1ZGU8Y3N0ZGlvPgojaW5jbHVkZTxjc3RyaW5nPgojaW5jbHVkZTxjbGltaXRzPgojaW5jbHVkZTxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwojZGVmaW5lIG1wIG1ha2VfcGFpcgojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIFZJIHZlY3RvcjxpbnQ+CiNkZWZpbmUgUElJIHBhaXI8aW50LGludD4KI2RlZmluZSBWSUkgdmVjdG9yPFBJSSA+CiNkZWZpbmUgZnQgZmlyc3QKI2RlZmluZSBzZCBzZWNvbmQKI2RlZmluZSByeih2LG4pIHYucmVzaXplKG4pCiNkZWZpbmUgVkwgdmVjdG9yPGxsPgojZGVmaW5lIFZMTCB2ZWN0b3I8cGFpcjxsbCxsbD4gPgojZGVmaW5lIFBMTCBwYWlyPCBsbCxsbCA+CiNkZWZpbmUgYWxsKHYpIHYuYmVnaW4oKSx2LmVuZCgpCiNkZWZpbmUgSVQgaXRlcmF0b3IKLy8gSW5wdXQvT3V0cHV0CiNkZWZpbmUgcHJpbnQodikgcHJpbnRmKCIlZFxuIix2KQojZGVmaW5lIHByaW50bGwodikgcHJpbnRmKCIlbGxkXG4iLHYpCiNkZWZpbmUgc2Nhbih2KSBzY2FuZigiJWQiLCZ2KQojZGVmaW5lIHNjYW5sbCh2KSBzY2FuZigiJWxsZCIsJnYpCi8vIGxvb3BzCiNkZWZpbmUgRk9SKGksYSxiKSBmb3IoaW50IGk9YTtpPGI7aSsrKQojZGVmaW5lIHJlcChpLG4pIGZvcihpbnQgaT0wO2k8bjtpKyspCi8vZXh0cmEKI2RlZmluZSBtcyh2LHZhbCkgbWVtc2V0KHYsdmFsLHNpemVvZih2KSkKI2RlZmluZSBmaWxsKHYsdmFsKSBmaWxsKGFsbCh2KSx2YWwpCiNkZWZpbmUgZl9pbihzdCkgZnJlb3BlbihzdCwiciIsc3RkaW4pCiNkZWZpbmUgZl9vdXQoc3QpIGZyZW9wZW4oc3QsInciLHN0ZG91dCkKI2RlZmluZSBQSUUgMy4xNDE1OTI2NTM1ODk3OTMyMzg0NjI2NDMzODMyNzk1MAojZGVmaW5lIE1PRCAxMDAwMDAwMDA3CiNpZmRlZiBPTkxJTkVfSlVER0UKIGlubGluZSB2b2lkIGlucCggaW50ICZuICkKIHsKICAgIG49MDsKICAgIGludCBjaD1nZXRjaGFyX3VubG9ja2VkKCk7aW50IHNpZ249MTsKICAgIHdoaWxlKCBjaCA8ICcwJyB8fCBjaCA+ICc5JyApe2lmKGNoPT0nLScpc2lnbj0tMTsgY2g9Z2V0Y2hhcl91bmxvY2tlZCgpO30KCiAgICB3aGlsZSggIGNoID49ICcwJyAmJiBjaCA8PSAnOScgKQogICAgICAgICAgICBuID0gKG48PDMpKyhuPDwxKSArIGNoLScwJywgY2g9Z2V0Y2hhcl91bmxvY2tlZCgpOwogICAgbj1uKnNpZ247CiAgfQojZWxzZQppbmxpbmUgdm9pZCBpbnAoaW50ICZuKXsKIGNpbj4+bjsKfQojZW5kaWYKI2RlZmluZSBNQVggMTAwMDAxCmludCBTVFs0Kk1BWF07CnZvaWQgdXBkYXRlKGludCBpZHgsaW50IHNzLGludCBzZSxpbnQgaW5kZXgpewogIGlmKHNzPT1zZSkge1NUW2lkeF09MTsgcmV0dXJuO30KICBpbnQgbWlkPShzcytzZSk+PjE7CiAgaWYoaW5kZXg8PW1pZCkgdXBkYXRlKDIqaWR4KzEsc3MsbWlkLGluZGV4KTsKICBlbHNlIHVwZGF0ZSgyKmlkeCsyLG1pZCsxLHNlLGluZGV4KTsKICBTVFtpZHhdPVNUW2lkeCoyKzFdK1NUWzIqaWR4KzJdOwp9CmludCBxdWVyeV9zdW0oaW50IGlkeCxpbnQgc3MsaW50IHNlLGludCBsLGludCByKXsKICBpZihzcz5yfHxsPnNlKSByZXR1cm4gMDsKICBpZihsPD1zcyYmc2U8PXIpIHJldHVybiBTVFtpZHhdOwogIGludCBtaWQ9KHNzK3NlKT4+MTsKICByZXR1cm4gcXVlcnlfc3VtKDIqaWR4KzEsc3MsbWlkLGwscikrcXVlcnlfc3VtKDIqaWR4KzIsbWlkKzEsc2UsbCxyKTsKfQppbnQgcXVlcnkoaW50IGlkeCxpbnQgc3MsaW50IHNlLGludCBpbmRleCl7CiAgaWYoc3M9PXNlKSByZXR1cm4gc3M7CiAgaW50IG1pZD0oc3Mrc2UpPj4xOwogIGlmKFNUWzIqaWR4KzFdPj1pbmRleCkKICAgcmV0dXJuIHF1ZXJ5KDIqaWR4KzEsc3MsbWlkLGluZGV4KTsKICByZXR1cm4gcXVlcnkoMippZHgrMixtaWQrMSxzZSxpbmRleC1TVFsyKmlkeCsxXSk7Cn0KCmludCBtYWluKCl7CgogLy8gI2lmbmRlZiBPTkxJTkVfSlVER0UKICAgLy8gZl9pbigiaW4uY3BwIik7CgkvL2Zfb3V0KCJvdXQuY3BwIik7CiAvLyAjZW5kaWYKICBpbnQgdD0xOwogIC8vaW5wKHQpOwogIHdoaWxlKHQtLSl7CiAgIGludCBuOyBpbnAobik7CiAgIFZMTCBBKG4pOwogICBWTCBCKG4pOwogICBpbnQgaTsKICAgRk9SKGksMCxuKSBzY2FubGwoQVtpXS5mdCksQltpXT1BW2ldLmZ0LEFbaV0uc2Q9aTsKICAgc29ydChhbGwoQSkpOwogICBpbnQgc3VtLGlkeDsKICAgbGwgYW5zPTE7CiAgIGZvcihpPW4tMTtpPj0wO2ktLSl7CiAgICAgIHN1bT1xdWVyeV9zdW0oMCwwLG4tMSxBW2ldLnNkLG4tMSk7CiAgICAgIGlmKHN1bSl7CiAgICAgICAgIHN1bT1xdWVyeV9zdW0oMCwwLG4tMSwwLEFbaV0uc2QpOwogICAgICAgICBhbnM9YW5zKihCW3F1ZXJ5KDAsMCxuLTEsc3VtKzEpXSk7CiAgICAgICAgIGFucyU9TU9EOwogICAgICB9CiAgICAgIHVwZGF0ZSgwLDAsbi0xLEFbaV0uc2QpOwogIH0KICBwcmludGxsKGFucyk7CiAgfQogIHJldHVybiAwOwp9Cgo=