/**
 * Я слил Atcoder Beginner Contest 172, решив всего две задачи!
 * Я не могу апнуть синего!
 * Я постоянно сливаю раунды, либо не решив тупую задачу, либо набрав штрафа!
 * Я постоянно уступаю всем своим друзьям и знакомым в контестах и нахожу этому оправдания!
 * Я постоянно придумываю сложные неверные решения к простым задачам!
 * -------------------------------------------------------------
 * -Решать сложные задачи
 * -Участвовать в контестах
 * -Делать виртуальные соревнования
 * -------------------------------------------------------------
 * Не уберу это, пока не начну нормально решать задачи, а не заниматься ерундой!!!
**/
  
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
 
#pragma GCC optimize("Ofast")
#pragma GCC target("avx,avx2,fma")
 
typedef long long  ll;

#define press_F_to_pay_respect ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define forn for(int i=0;i<n;i++) 
#define fore(i,a,b) for(int i = a; i < (b); i++)
#define pb push_back 
#define pob pop_back()
#define mp make_pair 
#define sc second 
#define f first 
#define ld long double
#define kek cout<<endl; 
#define rep(i,a,b) for(int i=a;i<b;i++)
#define all(v) ((v).begin()), ((v).end()) 
#define halt {cout<<"NO"; return 0;}

const ll MOD = 1e9 + 7;
const ll MOD1 = 998244353;
const int N = 200010;
const int INF = 1e8;
const ll LL_INF=1e10;
const long double pi=3.1415926535;
using namespace std;
using namespace __gnu_pbds;
typedef tree<ld,null_type,less<ld>,rb_tree_tag,tree_order_statistics_node_update> indexed_set;

int main()
{
    #if defined(_DEBUG)
	freopen("input.txt", "r", stdin);
	freopen("output.txt", "w", stdout);
    #endif
 press_F_to_pay_respect;
 // cout << fixed << setprecision(12) << ans;
 // string al = "abcdefghijklmnopqrstuvwxyz";
 int questions=1;
 // cin>>questions;
 
 while(questions--)
 {
   
  int n;
  cin>>n;
  vector<ll> v(n);
  forn cin>>v[i];
  ll ans=1000;
  ll cnt=0;
  vector<pair<bool,pair<int,int>>> p;
  for(int i=0;i<n-1;i++)
  {
            if(v[i]<v[i+1])
            {
                      p.pb({1,{v[i],v[i+1]}});
            }
            if(v[i]>v[i+1])
            {
                      p.pb({0,{v[i],v[i+1]}});
            }
  }
  while(p.size())
  {
            bool last=p.back().f;
            if(!last) p.pop_back();
            else break;
  }
  
  bool good=0;
  for(auto x: p) good|=x.f;
  if(!good) goto lambda;
  
  for(auto x: p)
  {
            bool ok=x.f;
            if(ok)
            {
                      int sell=x.sc.f;
                      int buy=x.sc.sc;
                      cnt+=ans/sell;
                      ans%=sell;
                      ans+=cnt*buy;
                      cnt=0;
            }
            else
            {
                     int sell=x.sc.sc;
                     int buy=x.sc.f;
                     ans+=cnt*buy;
                     cnt=0;
                     cnt+=ans/sell;
                     ans%=sell;
            }
           // cout<<ans<<" "<<cnt<<endl;
  }
  // cout<<cnt<<" ";
 lambda: cout<<ans;
   
   
          
          
          
         
 }
 
 
 
 
  // cout <<"Runtime is:"<<clock() * 1.0 / CLOCKS_PER_SEC <<endl;
   return 0;
   
   
 
}

Measured memory_bytes: 3652