#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
typedef pair <int, int> pii;
const int H[3] = { 100007, 28922, 912312 };
int n, A[200005], g[26][200005][3];
char S[200005];
bool ok(int X) {
int v[3] = { 0, };
for (int i = 1; i <= X; i++) for (int j = 0; j < 3; j++) v[j] = (v[j] * 26 + A[i]) % H[j];
vector <pii> table[100007];
pii cur;
for (int i = X; i <= n; i++) {
cur = make_pair(v[1], v[2]);
for (int j = 0; j < table[v[0]].size(); j++) if (cur == table[v[0]][j]) return 1;
if (i < n) {
table[v[0]].push_back(cur);
for (int j = 0; j < 3; j++) {
v[j] = (v[j] - g[A[i - X + 1]][X][j] + H[j]) % H[j];
v[j] = (v[j] * 26 + A[i + 1]) % H[j];
}
}
}
return 0;
}
int main() {
scanf("%d\n", &n);
gets(S + 1);
for (int k = 0; k < 3; k++) {
for (int i = 0; i < 26; i++) {
g[i][1][k] = i;
for (int j = 2; j <= n; j++) g[i][j][k] = (g[i][j-1][k] * 26) % H[k];
}
}
for (int i = 1; i <= n; i++) A[i] = (S[i] - 'a');
int low = 0, high = n - 1, res = 0, mid;
while (low <= high) {
mid = (low + high) / 2;
if (ok(mid)) {
if (res < mid) res = mid;
low = mid + 1;
}
else high = mid - 1;
}
printf("%d", res);
}
I2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGFsZ29yaXRobT4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdHlwZWRlZiBwYWlyIDxpbnQsIGludD4gcGlpOwpjb25zdCBpbnQgSFszXSA9IHsgMTAwMDA3LCAyODkyMiwgOTEyMzEyIH07CmludCBuLCBBWzIwMDAwNV0sIGdbMjZdWzIwMDAwNV1bM107CmNoYXIgU1syMDAwMDVdOwpib29sIG9rKGludCBYKSB7CiAgaW50IHZbM10gPSB7IDAsIH07Cglmb3IgKGludCBpID0gMTsgaSA8PSBYOyBpKyspIGZvciAoaW50IGogPSAwOyBqIDwgMzsgaisrKSB2W2pdID0gKHZbal0gKiAyNiArIEFbaV0pICUgSFtqXTsKCXZlY3RvciA8cGlpPiB0YWJsZVsxMDAwMDddOwoJcGlpIGN1cjsKCWZvciAoaW50IGkgPSBYOyBpIDw9IG47IGkrKykgewoJCWN1ciA9IG1ha2VfcGFpcih2WzFdLCB2WzJdKTsKCQlmb3IgKGludCBqID0gMDsgaiA8IHRhYmxlW3ZbMF1dLnNpemUoKTsgaisrKSBpZiAoY3VyID09IHRhYmxlW3ZbMF1dW2pdKSByZXR1cm4gMTsKCQlpZiAoaSA8IG4pIHsKCQkJdGFibGVbdlswXV0ucHVzaF9iYWNrKGN1cik7CgkJCWZvciAoaW50IGogPSAwOyBqIDwgMzsgaisrKSB7CgkJCQl2W2pdID0gKHZbal0gLSBnW0FbaSAtIFggKyAxXV1bWF1bal0gKyBIW2pdKSAlIEhbal07CgkJCQl2W2pdID0gKHZbal0gKiAyNiArIEFbaSArIDFdKSAlIEhbal07CgkJCX0KCQl9Cgl9CglyZXR1cm4gMDsKfQppbnQgbWFpbigpIHsKCXNjYW5mKCIlZFxuIiwgJm4pOwoJZ2V0cyhTICsgMSk7Cglmb3IgKGludCBrID0gMDsgayA8IDM7IGsrKykgewoJCWZvciAoaW50IGkgPSAwOyBpIDwgMjY7IGkrKykgewoJCQlnW2ldWzFdW2tdID0gaTsKCQkJZm9yIChpbnQgaiA9IDI7IGogPD0gbjsgaisrKSBnW2ldW2pdW2tdID0gKGdbaV1bai0xXVtrXSAqIDI2KSAlIEhba107CgkJfQoJfQoJZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSBBW2ldID0gKFNbaV0gLSAnYScpOwoJaW50IGxvdyA9IDAsIGhpZ2ggPSBuIC0gMSwgcmVzID0gMCwgbWlkOwoJd2hpbGUgKGxvdyA8PSBoaWdoKSB7CgkJbWlkID0gKGxvdyArIGhpZ2gpIC8gMjsKCQlpZiAob2sobWlkKSkgewoJCQlpZiAocmVzIDwgbWlkKSByZXMgPSBtaWQ7CgkJCWxvdyA9IG1pZCArIDE7CgkJfQoJCWVsc2UgaGlnaCA9IG1pZCAtIDE7Cgl9CglwcmludGYoIiVkIiwgcmVzKTsKfQ==