// Src : Vux2Code
/* Note :
*/
#include <bits/stdc++.h>
using namespace std;
typedef int ll;
typedef long double ld;
typedef pair<ll, ll> pll;
#define fi first
#define se second
#define pusb push_back
#define popb pop_back
#define pusf push_front
#define popf pop_front
#define vec3d vector<vector<vector<ll>>>
#define vec2d vector<vector<ll>>
#define vec1d vector<ll>
vec3d set3 (ll x, ll y, ll z, ll val = 0) {return vec3d (x, vec2d (y, vec1d (z, val)));}
vec2d set2 (ll x, ll y, ll val = 0) {return vec2d (x, vec1d (y, val));}
template<typename T>
using rvs_pq = std::priority_queue<T, std::vector<T>, std::greater<T>>;
#define forinc(i, a, b) for (ll i = (a); i <= (b); ++i)
#define fordec(i, a, b) for (ll i = (a); i >= (b); --i)
#define foreach(i, j) for (ll i : (j))
#define all(a) (a).begin (), (a). end ()
#define uni(a) (a).erase(unique((a).begin(), (a). end ()), (a). end ())
const ll maxN = 2e3 + 5, maxLog = 20, inf64 = 1e18, inf32 = 1e9, mod = 1e9 + 7, maxA = 2e3 + 5;
void maxi(ll &x, ll y) { x = max(x, y); }
void mini(ll &x, ll y) { x = min(x, y); }
/* ---------HASHING-------- */
const ll base = 31, mod2 = 1e9 + 9;
/* ---------BITMASK-------- */
// ll count(ll x) { return __builtin_popcountll(x); }
// ll fst(ll x) { return 63 - __builtin_clzll(x); }
// ll last(ll x) { return __builtin_ctzll(x); }
// bool bit(ll x, ll y) { return ((x >> y) & 1); }
ll t = 1;
ll n, cm [maxA] [maxA], f [maxA], atmp [maxA], m;
char a [maxA];
pll vec [maxN * maxN];
bool cmp(pll x, pll y){
ll lx = x.second - x.first;
ll ly = y.second - y.first;
if(lx != ly) return lx < ly;
int i = x.first, j = y.first;
int common = cm[i][j];
if(common > lx) return x. fi < y. fi;
return a[i + common] < a[j + common];
}
bool cmp2(pll x, pll y){
ll lx = x.second - x.first;
ll ly = y.second - y.first;
return lx == ly && cm[x.first][y.first] > lx;
}
void update(int i, ll v){
for(; i <= n; i += i & -i)
f[i] = max(f[i], v);
}
ll get(int i){
ll r = 0;
for(; i > 0; i -= i & -i)
r = max(r, f[i]);
return r;
}
void solve() {
cin >> n;
forinc (i, 1, n)cin >> a[i];
fordec (i, n, 1) fordec (j, n, 1) {
if(a[i] == a[j]) cm[i][j] = cm[i+1][j+1] + 1;
else cm[i][j] = 0;
}
for(int i = 1; i <= n; i++){
if(a[i] == '0'){
vec [m ++] = {i, i};
continue;
}
for(int j = i; j <= n; j++){
vec [m ++] = {i, j};
}
}
sort(vec, vec + m, cmp);
fill (f, f + maxA, 0);
ll ans = 0;
for(int i = 0; i < m; i ++){
int L = vec[i].first;
ll atmp = get(L-1) + 1;
ans = max(ans, atmp);
int R = vec[i].second;
update(R, atmp);
}
cout << ans << "\n";
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
#define TASK "catdayso"
if (fopen (TASK".inp", "r")) {
freopen (TASK".inp", "r", stdin);
freopen (TASK".out", "w", stdout);
}
// cin >> t;
while (t--) solve();
}
Ly8gU3JjIDogVnV4MkNvZGUKLyogTm90ZSA6CgoqLwoKI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdHlwZWRlZiBpbnQgbGw7CnR5cGVkZWYgbG9uZyBkb3VibGUgbGQ7CnR5cGVkZWYgcGFpcjxsbCwgbGw+IHBsbDsKCiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKCiNkZWZpbmUgcHVzYiBwdXNoX2JhY2sKI2RlZmluZSBwb3BiIHBvcF9iYWNrCiNkZWZpbmUgcHVzZiBwdXNoX2Zyb250CiNkZWZpbmUgcG9wZiBwb3BfZnJvbnQKCiNkZWZpbmUgdmVjM2QgdmVjdG9yPHZlY3Rvcjx2ZWN0b3I8bGw+Pj4KI2RlZmluZSB2ZWMyZCB2ZWN0b3I8dmVjdG9yPGxsPj4KI2RlZmluZSB2ZWMxZCB2ZWN0b3I8bGw+CnZlYzNkIHNldDMgKGxsIHgsIGxsIHksIGxsIHosIGxsIHZhbCA9IDApIHtyZXR1cm4gdmVjM2QgKHgsIHZlYzJkICh5LCB2ZWMxZCAoeiwgdmFsKSkpO30KdmVjMmQgc2V0MiAobGwgeCwgbGwgeSwgbGwgdmFsID0gMCkge3JldHVybiB2ZWMyZCAoeCwgdmVjMWQgKHksIHZhbCkpO30KCnRlbXBsYXRlPHR5cGVuYW1lIFQ+CnVzaW5nIHJ2c19wcSA9IHN0ZDo6cHJpb3JpdHlfcXVldWU8VCwgc3RkOjp2ZWN0b3I8VD4sIHN0ZDo6Z3JlYXRlcjxUPj47CgojZGVmaW5lIGZvcmluYyhpLCBhLCBiKSBmb3IgKGxsIGkgPSAoYSk7IGkgPD0gKGIpOyArK2kpCiNkZWZpbmUgZm9yZGVjKGksIGEsIGIpIGZvciAobGwgaSA9IChhKTsgaSA+PSAoYik7IC0taSkKI2RlZmluZSBmb3JlYWNoKGksIGopIGZvciAobGwgaSA6IChqKSkKCiNkZWZpbmUgYWxsKGEpIChhKS5iZWdpbiAoKSwgKGEpLiBlbmQgKCkKI2RlZmluZSB1bmkoYSkgKGEpLmVyYXNlKHVuaXF1ZSgoYSkuYmVnaW4oKSwgKGEpLiBlbmQgKCkpLCAoYSkuIGVuZCAoKSkKCmNvbnN0IGxsIG1heE4gPSAyZTMgKyA1LCBtYXhMb2cgPSAyMCwgaW5mNjQgPSAxZTE4LCBpbmYzMiA9IDFlOSwgbW9kID0gMWU5ICsgNywgbWF4QSA9IDJlMyArIDU7Cgp2b2lkIG1heGkobGwgJngsIGxsIHkpIHsgeCA9IG1heCh4LCB5KTsgfQp2b2lkIG1pbmkobGwgJngsIGxsIHkpIHsgeCA9IG1pbih4LCB5KTsgfQoKLyogLS0tLS0tLS0tSEFTSElORy0tLS0tLS0tICovCmNvbnN0IGxsIGJhc2UgPSAzMSwgbW9kMiA9IDFlOSArIDk7CgovKiAtLS0tLS0tLS1CSVRNQVNLLS0tLS0tLS0gKi8KLy8gbGwgY291bnQobGwgeCkgeyByZXR1cm4gX19idWlsdGluX3BvcGNvdW50bGwoeCk7IH0KLy8gbGwgZnN0KGxsIHgpIHsgcmV0dXJuIDYzIC0gX19idWlsdGluX2NsemxsKHgpOyB9Ci8vIGxsIGxhc3QobGwgeCkgeyByZXR1cm4gX19idWlsdGluX2N0emxsKHgpOyB9Ci8vIGJvb2wgYml0KGxsIHgsIGxsIHkpIHsgcmV0dXJuICgoeCA+PiB5KSAmIDEpOyB9CgpsbCB0ID0gMTsKCmxsIG4sIGNtIFttYXhBXSBbbWF4QV0sIGYgW21heEFdLCBhdG1wIFttYXhBXSwgbTsKY2hhciBhIFttYXhBXTsKcGxsIHZlYyBbbWF4TiAqIG1heE5dOwoKYm9vbCBjbXAocGxsIHgsIHBsbCB5KXsKICAgIGxsIGx4ID0geC5zZWNvbmQgLSB4LmZpcnN0OwogICAgbGwgbHkgPSB5LnNlY29uZCAtIHkuZmlyc3Q7CiAgICBpZihseCAhPSBseSkgcmV0dXJuIGx4IDwgbHk7CiAgICBpbnQgaSA9IHguZmlyc3QsIGogPSB5LmZpcnN0OwogICAgaW50IGNvbW1vbiA9IGNtW2ldW2pdOwogICAgaWYoY29tbW9uID4gbHgpIHJldHVybiB4LiBmaSA8IHkuIGZpOwogICAgcmV0dXJuIGFbaSArIGNvbW1vbl0gPCBhW2ogKyBjb21tb25dOwp9Cgpib29sIGNtcDIocGxsIHgsIHBsbCB5KXsKICAgIGxsIGx4ID0geC5zZWNvbmQgLSB4LmZpcnN0OwogICAgbGwgbHkgPSB5LnNlY29uZCAtIHkuZmlyc3Q7CiAgICByZXR1cm4gbHggPT0gbHkgJiYgY21beC5maXJzdF1beS5maXJzdF0gPiBseDsKfQp2b2lkIHVwZGF0ZShpbnQgaSwgbGwgdil7CiAgICBmb3IoOyBpIDw9IG47IGkgKz0gaSAmIC1pKQogICAgICAgIGZbaV0gPSBtYXgoZltpXSwgdik7Cn0KCmxsIGdldChpbnQgaSl7CiAgICBsbCByID0gMDsKICAgIGZvcig7IGkgPiAwOyBpIC09IGkgJiAtaSkKICAgICAgICByID0gbWF4KHIsIGZbaV0pOwogICAgcmV0dXJuIHI7Cn0KCnZvaWQgc29sdmUoKSB7CiAgICBjaW4gPj4gbjsKICAgIGZvcmluYyAoaSwgMSwgbiljaW4gPj4gYVtpXTsKICAgIGZvcmRlYyAoaSwgbiwgMSkgZm9yZGVjIChqLCBuLCAxKSB7CiAgICAgICAgaWYoYVtpXSA9PSBhW2pdKSBjbVtpXVtqXSA9IGNtW2krMV1baisxXSArIDE7CiAgICAgICAgZWxzZSBjbVtpXVtqXSA9IDA7CiAgICB9CiAgICBmb3IoaW50IGkgPSAxOyBpIDw9IG47IGkrKyl7CiAgICAgICAgaWYoYVtpXSA9PSAnMCcpewogICAgICAgICAgICB2ZWMgW20gKytdID0ge2ksIGl9OwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgZm9yKGludCBqID0gaTsgaiA8PSBuOyBqKyspewogICAgICAgICAgICB2ZWMgW20gKytdID0ge2ksIGp9OwogICAgICAgIH0KICAgIH0KICAgIHNvcnQodmVjLCB2ZWMgKyBtLCBjbXApOwogICAgZmlsbCAoZiwgZiArIG1heEEsIDApOwogICAgbGwgYW5zID0gMDsKICAgIGZvcihpbnQgaSA9IDA7IGkgPCBtOyBpICsrKXsKICAgICAgICBpbnQgTCA9IHZlY1tpXS5maXJzdDsKICAgICAgICBsbCBhdG1wID0gZ2V0KEwtMSkgKyAxOwogICAgICAgIGFucyA9IG1heChhbnMsIGF0bXApOwogICAgICAgIGludCBSID0gdmVjW2ldLnNlY29uZDsKICAgICAgICB1cGRhdGUoUiwgYXRtcCk7CiAgICB9CiAgICBjb3V0IDw8IGFucyA8PCAiXG4iOwp9CgppbnQgbWFpbigpIHsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKDApOwogICAgY2luLnRpZSgwKTsKICAgIGNvdXQudGllKDApOwogI2RlZmluZSBUQVNLICJjYXRkYXlzbyIKIGlmIChmb3BlbiAoVEFTSyIuaW5wIiwgInIiKSkgewogICAgIGZyZW9wZW4gKFRBU0siLmlucCIsICJyIiwgc3RkaW4pOwogICAgIGZyZW9wZW4gKFRBU0siLm91dCIsICJ3Iiwgc3Rkb3V0KTsKIH0KICAgIC8vIGNpbiA+PiB0OwogICAgd2hpbGUgKHQtLSkgc29sdmUoKTsKfQo=