#include <bits/stdc++.h>
using namespace std;
#define F first
#define S second
const int N = 1000 + 5;
int n;
string s;
int dp[N][N];
bool Compare(int x, int y, int u, int v) // kiểm tra số được tạo bởi đoạn [x, y] có lớn hơn đoạn [u, v] hay không
{
if(y - x != v - u) return (y - x > v - u); // nếu độ dài không bằng nhau thì có thể so sánh ngay
for(int i = 0; i <= y - x; i++)
if(s[x + i] != s[u + i]) return s[x + i] > s[u + i];
return 0;
}
int main()
{
cin.tie(0) -> sync_with_stdio(0);
cin >> n;
cin >> s;
s = " " + s;
int res = 0;
for(int i = 1; i <= n; i++)
{
for(int len = 1; len <= i; len++)
{
int l = i - len + 1, r = i;
if(s[l] == '0') // xử lý trường hợp số 0 ở đầu
{
if(len == 1) dp[i][len] = 1;
else continue;
}
for(int j = 0; j < l; j++) // tính quy hoạch động
{
int l2 = max(j - len + 1, 1), r2 = j;
if(Compare(l, r, l2, r2))
dp[i][len] = max(dp[i][len], dp[j][len] + 1);
else
dp[i][len] = max(dp[i][len], dp[j][len - 1] + 1);
res = max(res, dp[i][len]);
}
}
for(int len = 1; len <= n; len++) // max tiền tố
dp[i][len] = max(dp[i][len], dp[i][len - 1]);
}
cout << res;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgRiBmaXJzdAojZGVmaW5lIFMgc2Vjb25kCmNvbnN0IGludCBOID0gMTAwMCArIDU7CgppbnQgbjsKc3RyaW5nIHM7CmludCBkcFtOXVtOXTsKCmJvb2wgQ29tcGFyZShpbnQgeCwgaW50IHksIGludCB1LCBpbnQgdikgLy8ga2nhu4NtIHRyYSBz4buRIMSRxrDhu6NjIHThuqFvIGLhu59pIMSRb+G6oW4gW3gsIHldIGPDsyBs4bubbiBoxqFuIMSRb+G6oW4gW3UsIHZdIGhheSBraMO0bmcKewogICAgaWYoeSAtIHggIT0gdiAtIHUpIHJldHVybiAoeSAtIHggPiB2IC0gdSk7IC8vIG7hur91IMSR4buZIGTDoGkga2jDtG5nIGLhurFuZyBuaGF1IHRow6wgY8OzIHRo4buDIHNvIHPDoW5oIG5nYXkKICAgIGZvcihpbnQgaSA9IDA7IGkgPD0geSAtIHg7IGkrKykKICAgICAgICBpZihzW3ggKyBpXSAhPSBzW3UgKyBpXSkgcmV0dXJuIHNbeCArIGldID4gc1t1ICsgaV07CiAgICByZXR1cm4gMDsKfQoKaW50IG1haW4oKSAKewogICAgY2luLnRpZSgwKSAtPiBzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4gPj4gbjsKICAgIGNpbiA+PiBzOwogICAgcyA9ICIgIiArIHM7CiAgICBpbnQgcmVzID0gMDsKICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKQogICAgewogICAgICAgIGZvcihpbnQgbGVuID0gMTsgbGVuIDw9IGk7IGxlbisrKSAKICAgICAgICB7CiAgICAgICAgICAgIGludCBsID0gaSAtIGxlbiArIDEsIHIgPSBpOwogICAgICAgICAgICBpZihzW2xdID09ICcwJykgLy8geOG7rSBsw70gdHLGsOG7nW5nIGjhu6NwIHPhu5EgMCDhu58gxJHhuqd1CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmKGxlbiA9PSAxKSBkcFtpXVtsZW5dID0gMTsKICAgICAgICAgICAgICAgIGVsc2UgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZm9yKGludCBqID0gMDsgaiA8IGw7IGorKykgLy8gdMOtbmggcXV5IGhv4bqhY2ggxJHhu5luZwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpbnQgbDIgPSBtYXgoaiAtIGxlbiArIDEsIDEpLCByMiA9IGo7CiAgICAgICAgICAgICAgICBpZihDb21wYXJlKGwsIHIsIGwyLCByMikpCiAgICAgICAgICAgICAgICAgICAgZHBbaV1bbGVuXSA9IG1heChkcFtpXVtsZW5dLCBkcFtqXVtsZW5dICsgMSk7CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgZHBbaV1bbGVuXSA9IG1heChkcFtpXVtsZW5dLCBkcFtqXVtsZW4gLSAxXSArIDEpOwogICAgICAgICAgICAgICAgcmVzID0gbWF4KHJlcywgZHBbaV1bbGVuXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZm9yKGludCBsZW4gPSAxOyBsZW4gPD0gbjsgbGVuKyspIC8vIG1heCB0aeG7gW4gdOG7kQogICAgICAgICAgICBkcFtpXVtsZW5dID0gbWF4KGRwW2ldW2xlbl0sIGRwW2ldW2xlbiAtIDFdKTsKICAgIH0KICAgIGNvdXQgPDwgcmVzOwogICAgCglyZXR1cm4gMDsKfQogICAg