#include <bits/stdc++.h>
using namespace std;
#define int long long
const int MOD1 = 1e9 + 9;
const int MOD2 = 998244353;
struct pair_hash {
template <class T1, class T2>
std::size_t operator() (const std::pair<T1, T2>& pair) const {
auto hash1 = std::hash<T1>{}(pair.first);
auto hash2 = std::hash<T2>{}(pair.second);
return hash1 ^ (hash2 << 1);
}
};
struct sub_hash
{
vector<int> dp1, dp2, inv1, inv2;
int pw(int n, int k, int m){
int ans = 1;
while(k > 0){
if(k & 1) ans = (ans * n) % m;
n = (n * n) % m;
k >>= 1;
}
return ans;
}
pair<int, int> query(int i, int j){
int f = (dp1[j + 1] - dp1[i] + MOD1) % MOD1 * inv1[i] % MOD1;
int s = (dp2[j + 1] - dp2[i] + MOD2) % MOD2 * inv2[i] % MOD2;
return {f, s};
}
void init(vector<int> vec){
int p = 31, p1 = 1, p2 = 1, n = (int) vec.size();
dp1.resize(n + 5);
dp2.resize(n + 5);
inv1.resize(n + 5);
inv2.resize(n + 5);
for(int i = 0; i < n; ++i){
dp1[i + 1] = (dp1[i] + (vec[i] - '0' + 1) * p1 % MOD1) % MOD1;
dp2[i + 1] = (dp2[i] + (vec[i] - '0' + 1) * p2 % MOD2) % MOD2;
p1 = p1 * p % MOD1;
p2 = p2 * p % MOD2;
}
inv1[n - 1] = pw(pw(p, n - 1, MOD1), MOD1 - 2, MOD1);
inv2[n - 1] = pw(pw(p, n - 1, MOD2), MOD2 - 2, MOD2);
for(int i = n - 2; i >= 0; --i){
inv1[i] = inv1[i + 1] * p % MOD1;
inv2[i] = inv2[i + 1] * p % MOD2;
}
}
} hsh_on;
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
int n, ans = 0;
cin >> n;
vector<int> a(n, 0), srt;
for(int i = 0; i < n; ++i){
cin >> a[i];
}
vector<int> dp(n + 5, 0);
hsh_on.init(a);
for(int z = 0; z < n; ++z){
srt.push_back(a[z]);
sort(srt.begin(), srt.end());
sub_hash hsh_srt;
hsh_srt.init(srt);
map<pair<int, int>, bool> mp;
for(int i = 0; i < (int) srt.size(); ++i){
for(int j = i; j < (int) srt.size(); ++j){
mp[hsh_srt.query(i, j)] = 1;
}
}
int st = 0, en = z, j = z;
while(st <= en){
int mid = st + (en - st) / 2;
pair<int, int> qry = hsh_on.query(mid, (int) z);
if(mp.count(qry)){
j = mid;
en = mid - 1;
}else{
st = mid + 1;
}
}
dp[z] = (j == 0 ? 0 : dp[j - 1]) + 1;
}
cout << dp[n - 1] << "\n";
return 0;
}