#include <limits>
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define dl '\n'
const int INF = 1e18;
#define printvec(v) for(int i=0;i<v.size();i++){cout<<v[i]<<" ";}cout<<endl;
#define loop(i,n){} for(int i=0;i<n;i++){}
#define read(v,n) for(int i=0;i<n;i++){cin>>v[i];}
#define all(v) ((v).begin()), ((v).end())
#define rall(v) ((v).rbegin()), ((v).rend())
typedef vector<int> vi;
typedef vector<pair<int,int>> vip;
#define ll long long
void Antoine_Sobhy(){
ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
#ifndef ONLINE_JUDGE
// freopen("business.in", "r", stdin);
freopen("/home/antoine/Desktop/acpc/input.txt", "r", stdin);
freopen("/home/antoine/Desktop/acpc/output.txt", "w", stdout);
#endif
}
void Read_Write() {
ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
freopen("nocross.in", "r", stdin);
freopen("nocross.out", "w", stdout);
}
int ce;
vi coins={1,5,10,25,50};
int query(int i,int j) {
cout<<"?"<<" "<<i<<" "<<j<<dl;
cout.flush();
int x;
cin>>x;
return x;
}
const int N=4e5+2;
int dp[N];
map<char,vi>indi;
int n;
string s;
int rec(int l){
if(l==n){
return 0;
}
int &ret=dp[l];
if (~ret) return ret;
ret=-1e8;
bool flag=false;
int las=lower_bound(indi[s[l]].begin(),indi[s[l]].end(),l)-indi[s[l]].begin() ;
int elas=indi[s[l]][las];
for(int r=las+1;r<indi[s[l]].size();r++){
if(1){
flag=true;
ret=max(ret,rec(indi[s[l]][r]+1)+1);
}
}
if(!flag)
{
return -1e8;
}
else{
return ret;
}
}
vi ans(N);
void build(int l,int i)
{
if(l==n){
return ;
}
int ret=0;
bool flag=false;
int cho;
int las;
las=lower_bound(indi[s[l]].begin(),indi[s[l]].end(),l)-indi[s[l]].begin() ;
int elas=indi[s[l]][las];
for(int r=las+1;r<indi[s[l]].size();r++){
if(1){
flag=true;
ret=max(ret,rec(indi[s[l]][r]+1)+1);
if (ret==rec(indi[s[l]][r]+1)+1){
cho=indi[s[l]][r];
}
}
}
ans[i]=cho-l+1;
build(cho+1,i+1);
}
void solve(){
cin>>n;
cin>>s;
for (int i=0;i<n;i++){
indi[s[i]].push_back(i);
}
int ans1=rec(0);
if (ans1<=0)
{
cout<<-1<<dl;
}
else
{
build(0,0);
cout<<ans1<<dl;
for(int i=0;i<ans1;i++)
{
cout<<ans[i]<<" ";
}
cout<<dl;
}
}
int32_t main(){
Antoine_Sobhy();
int t=1;
// cin>>t;
memset(dp,-1,sizeof(dp));
while(t--) {
solve();
}
return 0;
}
ICNpbmNsdWRlIDxsaW1pdHM+CiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgaW50ICAgbG9uZyBsb25nCiNkZWZpbmUgZGwgJ1xuJwpjb25zdCBpbnQgSU5GID0gMWUxODsKI2RlZmluZSBwcmludHZlYyh2KSBmb3IoaW50IGk9MDtpPHYuc2l6ZSgpO2krKyl7Y291dDw8dltpXTw8IiAiO31jb3V0PDxlbmRsOwojZGVmaW5lIGxvb3AoaSxuKXt9IGZvcihpbnQgaT0wO2k8bjtpKyspe30KI2RlZmluZSByZWFkKHYsbikgICBmb3IoaW50IGk9MDtpPG47aSsrKXtjaW4+PnZbaV07fQojZGVmaW5lIGFsbCh2KSAgICAgICAgICAgICAgICAoKHYpLmJlZ2luKCkpLCAoKHYpLmVuZCgpKQojZGVmaW5lIHJhbGwodikgICAgICAgICAgICAgICAgKCh2KS5yYmVnaW4oKSksICgodikucmVuZCgpKQp0eXBlZGVmIHZlY3RvcjxpbnQ+IHZpOwp0eXBlZGVmIHZlY3RvcjxwYWlyPGludCxpbnQ+PiB2aXA7CiNkZWZpbmUgbGwgbG9uZyBsb25nCnZvaWQgQW50b2luZV9Tb2JoeSgpewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSksIGNpbi50aWUobnVsbHB0ciksIGNvdXQudGllKG51bGxwdHIpOwojaWZuZGVmIE9OTElORV9KVURHRQogICAgLy8gZnJlb3BlbigiYnVzaW5lc3MuaW4iLCAiciIsIHN0ZGluKTsKICAgIGZyZW9wZW4oIi9ob21lL2FudG9pbmUvRGVza3RvcC9hY3BjL2lucHV0LnR4dCIsICJyIiwgc3RkaW4pOwogICAgZnJlb3BlbigiL2hvbWUvYW50b2luZS9EZXNrdG9wL2FjcGMvb3V0cHV0LnR4dCIsICJ3Iiwgc3Rkb3V0KTsKI2VuZGlmCn0KCnZvaWQgUmVhZF9Xcml0ZSgpIHsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpLCBjaW4udGllKG51bGxwdHIpLCBjb3V0LnRpZShudWxscHRyKTsKICAgIGZyZW9wZW4oIm5vY3Jvc3MuaW4iLCAiciIsIHN0ZGluKTsKICAgIGZyZW9wZW4oIm5vY3Jvc3Mub3V0IiwgInciLCBzdGRvdXQpOwp9CmludCBjZTsKdmkgY29pbnM9ezEsNSwxMCwyNSw1MH07CmludCBxdWVyeShpbnQgaSxpbnQgaikgewogICAgY291dDw8Ij8iPDwiICI8PGk8PCIgIjw8ajw8ZGw7CiAgICBjb3V0LmZsdXNoKCk7CiAgICBpbnQgeDsKICAgIGNpbj4+eDsKICAgIHJldHVybiB4Owp9CmNvbnN0IGludCBOPTRlNSsyOwppbnQgZHBbTl07Cm1hcDxjaGFyLHZpPmluZGk7CmludCBuOwpzdHJpbmcgczsKaW50IHJlYyhpbnQgbCl7CiAgICBpZihsPT1uKXsKICAgICAgICByZXR1cm4gMDsKICAgIH0KICAgIGludCAmcmV0PWRwW2xdOwogICAgaWYgKH5yZXQpIHJldHVybiByZXQ7CiAgICByZXQ9LTFlODsKICAgIGJvb2wgZmxhZz1mYWxzZTsKICAgaW50IGxhcz1sb3dlcl9ib3VuZChpbmRpW3NbbF1dLmJlZ2luKCksaW5kaVtzW2xdXS5lbmQoKSxsKS1pbmRpW3NbbF1dLmJlZ2luKCkgICA7CiAgICBpbnQgZWxhcz1pbmRpW3NbbF1dW2xhc107CiAgICBmb3IoaW50IHI9bGFzKzE7cjxpbmRpW3NbbF1dLnNpemUoKTtyKyspewogICAgICAgIGlmKDEpewogICAgICAgICAgICBmbGFnPXRydWU7CiAgICAgICAgcmV0PW1heChyZXQscmVjKGluZGlbc1tsXV1bcl0rMSkrMSk7CiAgICAgICAgfQogICAgfQogICAgaWYoIWZsYWcpCiAgICB7CiAgICAgICAgcmV0dXJuICAtMWU4OwogICAgfQogICAgZWxzZXsKICAgICAgICByZXR1cm4gcmV0OwogICAgfQp9Cgp2aSBhbnMoTik7CnZvaWQgYnVpbGQoaW50IGwsaW50IGkpCnsKICAgIGlmKGw9PW4pewogICAgICAgIHJldHVybiA7CiAgICB9CiAgICBpbnQgcmV0PTA7CiAgICBib29sIGZsYWc9ZmFsc2U7CiAgICBpbnQgY2hvOwogICAgaW50IGxhczsKICAgIGxhcz1sb3dlcl9ib3VuZChpbmRpW3NbbF1dLmJlZ2luKCksaW5kaVtzW2xdXS5lbmQoKSxsKS1pbmRpW3NbbF1dLmJlZ2luKCkgICA7CiAgICBpbnQgZWxhcz1pbmRpW3NbbF1dW2xhc107CiAgICBmb3IoaW50IHI9bGFzKzE7cjxpbmRpW3NbbF1dLnNpemUoKTtyKyspewogICAgICAgIGlmKDEpewogICAgICAgICAgICBmbGFnPXRydWU7CiAgICAgICAgICAgIHJldD1tYXgocmV0LHJlYyhpbmRpW3NbbF1dW3JdKzEpKzEpOwogICAgICAgICAgICBpZiAocmV0PT1yZWMoaW5kaVtzW2xdXVtyXSsxKSsxKXsKICAgICAgICAgICAgICAgIGNobz1pbmRpW3NbbF1dW3JdOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgIH0KICAgIGFuc1tpXT1jaG8tbCsxOwogICAgYnVpbGQoY2hvKzEsaSsxKTsKCn0KCnZvaWQgc29sdmUoKXsKICAgIGNpbj4+bjsKICAgIGNpbj4+czsKICAgIGZvciAoaW50IGk9MDtpPG47aSsrKXsKICAgICAgICBpbmRpW3NbaV1dLnB1c2hfYmFjayhpKTsKICAgIH0KICAgIGludCBhbnMxPXJlYygwKTsKICAgIGlmIChhbnMxPD0wKQogICAgewogICAgICAgIGNvdXQ8PC0xPDxkbDsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgIGJ1aWxkKDAsMCk7CiAgICAgICAgY291dDw8YW5zMTw8ZGw7CiAgICAgICAgZm9yKGludCBpPTA7aTxhbnMxO2krKykKICAgICAgICB7CiAgICAgICAgICAgIGNvdXQ8PGFuc1tpXTw8IiAiOwogICAgICAgIH0KICAgICAgICBjb3V0PDxkbDsKICAgIH0KfQppbnQzMl90IG1haW4oKXsKICAgIEFudG9pbmVfU29iaHkoKTsKICAgIGludCB0PTE7CiAgICAvLyBjaW4+PnQ7CiAgICBtZW1zZXQoZHAsLTEsc2l6ZW9mKGRwKSk7CiAgICB3aGlsZSh0LS0pIHsKICAgICAgICBzb2x2ZSgpOwogICAgfQoKICAgIHJldHVybiAwOwoKfQ==