#include <bits/stdc++.h>
using namespace std;
#define FOR(i,l,r) for (int i = l; i <= r; ++i)
#define FOD(i,r,l) for (int i = r; i >= l; --i)
#define ll long long
#define ld long double
int k;
int f[(int)5e5 + 10][28];
int d[28], dl[28], dr[28], s[28], sl[28], sr[28];
string str;
bool ok(int x) {
FOR(i, x, str.size()) {
FOR(j, 1, 26) {
d[j] = f[i][j] - f[i - x][j];
s[j] = d[j] * j;
dl[j] = dl[j - 1] + d[j];
sl[j] = sl[j - 1] + s[j];
}
FOD(j, 26, 1) {
dr[j] = dr[j + 1] + d[j];
sr[j] = sr[j + 1] + s[j];
}
int mn = 1e9;
FOR(i, 1, 26) {
mn = min(mn, dl[i - 1] * i - sl[i - 1] + sr[i + 1] - dr[i + 1] * i);
}
if (mn <= k) return true;
}
return 0;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
if (fopen("PLAN.inp", "r")) {
freopen("PLAN.inp", "r", stdin);
freopen("PLAN.out", "w", stdout);
}
cin >> k >> str;
FOR(i, 1, str.size()) {
FOR(j, 1, 26) {
f[i][j] = f[i - 1][j];
}
f[i][str[i - 1] - 'a' + 1]++;
}
int l = 1, r = str.size(), res = 1;
while (l <= r) {
int mid = l + r >> 1;
if (ok(mid)) {
res = max(res, mid);
l = mid + 1;
}
else {
r = mid - 1;
}
}
cout << res;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIEZPUihpLGwscikgZm9yIChpbnQgaSA9IGw7IGkgPD0gcjsgKytpKQojZGVmaW5lIEZPRChpLHIsbCkgZm9yIChpbnQgaSA9IHI7IGkgPj0gbDsgLS1pKQojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIGxkIGxvbmcgZG91YmxlCgppbnQgazsKaW50IGZbKGludCk1ZTUgKyAxMF1bMjhdOwppbnQgZFsyOF0sIGRsWzI4XSwgZHJbMjhdLCBzWzI4XSwgc2xbMjhdLCBzclsyOF07CnN0cmluZyBzdHI7Cgpib29sIG9rKGludCB4KSB7CglGT1IoaSwgeCwgc3RyLnNpemUoKSkgewoJCUZPUihqLCAxLCAyNikgewoJCQlkW2pdID0gZltpXVtqXSAtIGZbaSAtIHhdW2pdOwoJCQlzW2pdID0gZFtqXSAqIGo7CgoJCQlkbFtqXSA9IGRsW2ogLSAxXSArIGRbal07CgkJCXNsW2pdID0gc2xbaiAtIDFdICsgc1tqXTsKCQl9CgkJRk9EKGosIDI2LCAxKSB7CgkJCWRyW2pdID0gZHJbaiArIDFdICsgZFtqXTsKCQkJc3Jbal0gPSBzcltqICsgMV0gKyBzW2pdOwoJCX0KCgkJaW50IG1uID0gMWU5OwoJCUZPUihpLCAxLCAyNikgewoJCQltbiA9IG1pbihtbiwgZGxbaSAtIDFdICogaSAtIHNsW2kgLSAxXSArIHNyW2kgKyAxXSAtIGRyW2kgKyAxXSAqIGkpOwoJCX0KCQlpZiAobW4gPD0gaykgcmV0dXJuIHRydWU7Cgl9CglyZXR1cm4gMDsKfQoKaW50IG1haW4oKSB7Cglpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKCWNpbi50aWUoTlVMTCk7Cgljb3V0LnRpZShOVUxMKTsKCglpZiAoZm9wZW4oIlBMQU4uaW5wIiwgInIiKSkgewoJCWZyZW9wZW4oIlBMQU4uaW5wIiwgInIiLCBzdGRpbik7CgkJZnJlb3BlbigiUExBTi5vdXQiLCAidyIsIHN0ZG91dCk7Cgl9CgoJY2luID4+IGsgPj4gc3RyOwoKCUZPUihpLCAxLCBzdHIuc2l6ZSgpKSB7CgkJRk9SKGosIDEsIDI2KSB7CgkJCWZbaV1bal0gPSBmW2kgLSAxXVtqXTsKCQl9CgkJZltpXVtzdHJbaSAtIDFdIC0gJ2EnICsgMV0rKzsKCX0KCglpbnQgbCA9IDEsIHIgPSBzdHIuc2l6ZSgpLCByZXMgPSAxOwoJd2hpbGUgKGwgPD0gcikgewoJCWludCBtaWQgPSBsICsgciA+PiAxOwoJCWlmIChvayhtaWQpKSB7CgkJCXJlcyA9IG1heChyZXMsIG1pZCk7CgkJCWwgPSBtaWQgKyAxOwoJCX0KCQllbHNlIHsKCQkJciA9IG1pZCAtIDE7CgkJfQoJfQoJY291dCA8PCByZXM7Cn0K