// em thu thoi
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define ld long double
#define eb emplace_back
#define pb push_back
#define fi first
#define se second
#define nn '\n'
#define pi pair<int, int>
#define unmp unordered_map
#define uns unordered_set
#define lb lower_bound
#define ub upper_bound
#define TASK " "
#define FOR(i, a, n) for(int i = (a) ; i <= (n) ; i++ )
#define FORD(i, a, n) for(int i = (a); i >= (n); i--)
#define FORX(i, x) for(auto (i) : (x))
#define ms(a, x) memset((a), (x), sizeof((a)))
#define all(a) (a).begin(), (a).end()
#define All(a, n) (a) + 1, (a) + 1 + n
const int INF = 1e18;
const int mod = 1e9+7;
const int N = 1e6 + 5;
int n;
char a[N];
map<char, int> cnt;
int mx = 0;
int mn = INF;
int kq = 0;
vector<int> pos[26];
void nhap(){
cin >> n;
FOR(i, 1, n){
cin >> a[i];
pos[a[i] - 'a'].pb(i);
}
}
void solve(){
for(int i = 0; i <= 25; i++){
if(pos[i].empty()) continue;
for(int j = 0; j <= 25; j++){
// gia su i la max, j la min
if(i == j || pos[j].empty()) continue;
int cnti = 0, cntj = -1000000000;
int u = 0, v = 0;
while(u < (int)pos[i].size() || v < (int)pos[j].size()){
if(u < (int)pos[i].size() && (v == (int)pos[j].size() || pos[i][u] < pos[j][v])){
cnti++;
if(cntj != -1000000000){
cntj++;
}
u++;
}
else{
cntj = max(cnti - 1, (cntj != -1000000000 ? cntj - 1 : -1000000000));
cnti = 0;
v++;
}
if(cntj != -1000000000){
kq = max(kq, cntj);
}
}
}
}
cout << kq << nn;
}
signed main() {
//freopen("CSBN.INP", "r", stdin);
//freopen("CSBN.OUT", "w", stdout);
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
nhap();
solve();
return 0;
}
Ly8gZW0gdGh1IHRob2kKI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiAKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAojZGVmaW5lIGludCBsb25nIGxvbmcKI2RlZmluZSBsZCBsb25nIGRvdWJsZQojZGVmaW5lIGViIGVtcGxhY2VfYmFjawojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgbm4gJ1xuJwojZGVmaW5lIHBpIHBhaXI8aW50LCBpbnQ+CiNkZWZpbmUgdW5tcCB1bm9yZGVyZWRfbWFwCiNkZWZpbmUgdW5zIHVub3JkZXJlZF9zZXQKI2RlZmluZSBsYiBsb3dlcl9ib3VuZAojZGVmaW5lIHViIHVwcGVyX2JvdW5kCiNkZWZpbmUgVEFTSyAiICIKIAojZGVmaW5lIEZPUihpLCBhLCBuKSBmb3IoaW50ICBpID0gIChhKSA7IGkgPD0gKG4pIDsgaSsrICkKI2RlZmluZSBGT1JEKGksIGEsIG4pIGZvcihpbnQgaSA9IChhKTsgaSA+PSAobik7IGktLSkKI2RlZmluZSBGT1JYKGksIHgpIGZvcihhdXRvIChpKSA6ICh4KSkKI2RlZmluZSBtcyhhLCB4KSBtZW1zZXQoKGEpLCAoeCksIHNpemVvZigoYSkpKQojZGVmaW5lIGFsbChhKSAoYSkuYmVnaW4oKSwgKGEpLmVuZCgpCiNkZWZpbmUgQWxsKGEsIG4pIChhKSArIDEsIChhKSArIDEgKyBuCiAKIApjb25zdCBpbnQgSU5GID0gMWUxODsKY29uc3QgaW50IG1vZCA9IDFlOSs3Owpjb25zdCBpbnQgTiA9IDFlNiArIDU7CmludCBuOwpjaGFyIGFbTl07Cm1hcDxjaGFyLCBpbnQ+IGNudDsKaW50IG14ID0gMDsKaW50IG1uID0gSU5GOwppbnQga3EgPSAwOwp2ZWN0b3I8aW50PiBwb3NbMjZdOwp2b2lkIG5oYXAoKXsKICAgIGNpbiA+PiBuOwogICAgRk9SKGksIDEsIG4pewogICAgCWNpbiA+PiBhW2ldOwogICAgCXBvc1thW2ldIC0gJ2EnXS5wYihpKTsKICAgIH0KfQp2b2lkIHNvbHZlKCl7CgkgZm9yKGludCBpID0gMDsgaSA8PSAyNTsgaSsrKXsKCSAJaWYocG9zW2ldLmVtcHR5KCkpIGNvbnRpbnVlOwoJIAlmb3IoaW50IGogPSAwOyBqIDw9IDI1OyBqKyspewoJIAkJLy8gZ2lhIHN1IGkgbGEgbWF4LCBqIGxhIG1pbgoJIAkJaWYoaSA9PSBqIHx8IHBvc1tqXS5lbXB0eSgpKSBjb250aW51ZTsKCSAJCWludCBjbnRpID0gMCwgY250aiA9IC0xMDAwMDAwMDAwOwoJIAkJaW50IHUgPSAwLCB2ID0gMDsKCSAJCXdoaWxlKHUgPCAoaW50KXBvc1tpXS5zaXplKCkgfHwgdiA8IChpbnQpcG9zW2pdLnNpemUoKSl7CgkgCQkJaWYodSA8IChpbnQpcG9zW2ldLnNpemUoKSAmJiAodiA9PSAoaW50KXBvc1tqXS5zaXplKCkgfHwgcG9zW2ldW3VdIDwgcG9zW2pdW3ZdKSl7CgkgCQkJCWNudGkrKzsgCgkgCQkJCWlmKGNudGogIT0gLTEwMDAwMDAwMDApewoJIAkJCQkJY250aisrOwoJIAkJCQl9CgkgCQkJCXUrKzsKCSAJCQl9IAoJIAkJCQoJIAkJCWVsc2V7CgkgCQkJCWNudGogPSBtYXgoY250aSAtIDEsIChjbnRqICE9IC0xMDAwMDAwMDAwID8gY250aiAtIDEgOiAtMTAwMDAwMDAwMCkpOwoJIAkJCQljbnRpID0gMDsKCSAJCQkJdisrOwoJIAkJCX0gCgkgCQkJCgkgCQkJaWYoY250aiAhPSAtMTAwMDAwMDAwMCl7CgkgCQkJCWtxID0gbWF4KGtxLCBjbnRqKTsKCSAJCQl9CgkgCQl9CgkgCQkKCSAJfQoJIH0KCSBjb3V0IDw8IGtxIDw8IG5uOwp9CnNpZ25lZCBtYWluKCkgewoJLy9mcmVvcGVuKCJDU0JOLklOUCIsICJyIiwgc3RkaW4pOwoJLy9mcmVvcGVuKCJDU0JOLk9VVCIsICJ3Iiwgc3Rkb3V0KTsKCWlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7CgljaW4udGllKDApOwoJY291dC50aWUoMCk7CgluaGFwKCk7Cglzb2x2ZSgpOwogICAgcmV0dXJuIDA7Cn0=