#include <bits/stdc++.h>
using namespace std;
using vi = vector<int>;
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
string s;
if(!(cin>>n>>s)) return 0;
vector<int> posP, posZ, posM;
for(int i=0;i<n;i++){
if(s[i]=='+') posP.push_back(i);
else if(s[i]=='0') posZ.push_back(i);
else posM.push_back(i);
}
int A = posP.size(), B = posZ.size(), C = posM.size();
if(B==1){ cout << -1 << '\n'; return 0; }
vi init(n, INT_MAX);
auto lexmin = [&](const vi &a, const vi &b)->bool{
if(a.empty()) return false;
if(b.empty()) return true;
return a < b;
};
struct Key{int j,t,k;};
auto keyid = [&](int j,int t,int k){ return j*(B+1)*(C+1) + t*(C+1) + k; };
int layerSize = (A+1)*(B+1)*(C+1);
vector<unordered_map<int,vi>> dp(n+1);
dp[0][ keyid(0,0,0) ] = init;
for(int i=0;i<n;i++){
for(auto &entry : dp[i]){
int id = entry.first;
vi cur = entry.second;
int tmp = id;
int k = tmp % (C+1); tmp /= (C+1);
int t = tmp % (B+1);
int j = tmp / (B+1);
int used = j + t + k;
int label = i + 1;
if(used % 2 == 0){
if(j < A){
int nj=j+1, nt=t, nk=k;
vi nw = cur;
nw[posP[j]] = label;
int nid = keyid(nj,nt,nk);
auto it = dp[i+1].find(nid);
if(it==dp[i+1].end() || nw < it->second) dp[i+1][nid] = nw;
}
} else {
if(k < C){
int nj=j, nt=t, nk=k+1;
vi nw = cur;
nw[posM[k]] = label;
int nid = keyid(nj,nt,nk);
auto it = dp[i+1].find(nid);
if(it==dp[i+1].end() || nw < it->second) dp[i+1][nid] = nw;
}
}
for(int p=2; p<=B - t; ++p){
int nj=j, nt=t+p, nk=k;
vi nw = cur;
for(int z=0; z<p; ++z) nw[posZ[t+z]] = label;
int nid = keyid(nj,nt,nk);
auto it = dp[i+1].find(nid);
if(it==dp[i+1].end() || nw < it->second) dp[i+1][nid] = nw;
}
}
}
vi ans;
for(int i=1;i<=n;i++){
int id = keyid(A,B,C);
auto it = dp[i].find(id);
if(it==dp[i].end()) continue;
if(ans.empty() || it->second < ans) ans = it->second;
}
if(ans.empty()){ cout << -1 << '\n'; return 0; }
for(int i=0;i<n;i++){
if(i) cout << ' ';
cout << ans[i];
}
cout << '\n';
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnVzaW5nIHZpID0gdmVjdG9yPGludD47CmludCBtYWluKCl7CiAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKG51bGxwdHIpOwogICAgaW50IG47CiAgICBzdHJpbmcgczsKICAgIGlmKCEoY2luPj5uPj5zKSkgcmV0dXJuIDA7CiAgICB2ZWN0b3I8aW50PiBwb3NQLCBwb3NaLCBwb3NNOwogICAgZm9yKGludCBpPTA7aTxuO2krKyl7CiAgICAgICAgaWYoc1tpXT09JysnKSBwb3NQLnB1c2hfYmFjayhpKTsKICAgICAgICBlbHNlIGlmKHNbaV09PScwJykgcG9zWi5wdXNoX2JhY2soaSk7CiAgICAgICAgZWxzZSBwb3NNLnB1c2hfYmFjayhpKTsKICAgIH0KICAgIGludCBBID0gcG9zUC5zaXplKCksIEIgPSBwb3NaLnNpemUoKSwgQyA9IHBvc00uc2l6ZSgpOwogICAgaWYoQj09MSl7IGNvdXQgPDwgLTEgPDwgJ1xuJzsgcmV0dXJuIDA7IH0KICAgIHZpIGluaXQobiwgSU5UX01BWCk7CiAgICBhdXRvIGxleG1pbiA9IFsmXShjb25zdCB2aSAmYSwgY29uc3QgdmkgJmIpLT5ib29sewogICAgICAgIGlmKGEuZW1wdHkoKSkgcmV0dXJuIGZhbHNlOwogICAgICAgIGlmKGIuZW1wdHkoKSkgcmV0dXJuIHRydWU7CiAgICAgICAgcmV0dXJuIGEgPCBiOwogICAgfTsKICAgIHN0cnVjdCBLZXl7aW50IGosdCxrO307CiAgICBhdXRvIGtleWlkID0gWyZdKGludCBqLGludCB0LGludCBrKXsgcmV0dXJuIGoqKEIrMSkqKEMrMSkgKyB0KihDKzEpICsgazsgfTsKICAgIGludCBsYXllclNpemUgPSAoQSsxKSooQisxKSooQysxKTsKICAgIHZlY3Rvcjx1bm9yZGVyZWRfbWFwPGludCx2aT4+IGRwKG4rMSk7CiAgICBkcFswXVsga2V5aWQoMCwwLDApIF0gPSBpbml0OwogICAgZm9yKGludCBpPTA7aTxuO2krKyl7CiAgICAgICAgZm9yKGF1dG8gJmVudHJ5IDogZHBbaV0pewogICAgICAgICAgICBpbnQgaWQgPSBlbnRyeS5maXJzdDsKICAgICAgICAgICAgdmkgY3VyID0gZW50cnkuc2Vjb25kOwogICAgICAgICAgICBpbnQgdG1wID0gaWQ7CiAgICAgICAgICAgIGludCBrID0gdG1wICUgKEMrMSk7IHRtcCAvPSAoQysxKTsKICAgICAgICAgICAgaW50IHQgPSB0bXAgJSAoQisxKTsKICAgICAgICAgICAgaW50IGogPSB0bXAgLyAoQisxKTsKICAgICAgICAgICAgaW50IHVzZWQgPSBqICsgdCArIGs7CiAgICAgICAgICAgIGludCBsYWJlbCA9IGkgKyAxOwogICAgICAgICAgICBpZih1c2VkICUgMiA9PSAwKXsKICAgICAgICAgICAgICAgIGlmKGogPCBBKXsKICAgICAgICAgICAgICAgICAgICBpbnQgbmo9aisxLCBudD10LCBuaz1rOwogICAgICAgICAgICAgICAgICAgIHZpIG53ID0gY3VyOwogICAgICAgICAgICAgICAgICAgIG53W3Bvc1Bbal1dID0gbGFiZWw7CiAgICAgICAgICAgICAgICAgICAgaW50IG5pZCA9IGtleWlkKG5qLG50LG5rKTsKICAgICAgICAgICAgICAgICAgICBhdXRvIGl0ID0gZHBbaSsxXS5maW5kKG5pZCk7CiAgICAgICAgICAgICAgICAgICAgaWYoaXQ9PWRwW2krMV0uZW5kKCkgfHwgbncgPCBpdC0+c2Vjb25kKSBkcFtpKzFdW25pZF0gPSBudzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGlmKGsgPCBDKXsKICAgICAgICAgICAgICAgICAgICBpbnQgbmo9aiwgbnQ9dCwgbms9aysxOwogICAgICAgICAgICAgICAgICAgIHZpIG53ID0gY3VyOwogICAgICAgICAgICAgICAgICAgIG53W3Bvc01ba11dID0gbGFiZWw7CiAgICAgICAgICAgICAgICAgICAgaW50IG5pZCA9IGtleWlkKG5qLG50LG5rKTsKICAgICAgICAgICAgICAgICAgICBhdXRvIGl0ID0gZHBbaSsxXS5maW5kKG5pZCk7CiAgICAgICAgICAgICAgICAgICAgaWYoaXQ9PWRwW2krMV0uZW5kKCkgfHwgbncgPCBpdC0+c2Vjb25kKSBkcFtpKzFdW25pZF0gPSBudzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBmb3IoaW50IHA9MjsgcDw9QiAtIHQ7ICsrcCl7CiAgICAgICAgICAgICAgICBpbnQgbmo9aiwgbnQ9dCtwLCBuaz1rOwogICAgICAgICAgICAgICAgdmkgbncgPSBjdXI7CiAgICAgICAgICAgICAgICBmb3IoaW50IHo9MDsgejxwOyArK3opIG53W3Bvc1pbdCt6XV0gPSBsYWJlbDsKICAgICAgICAgICAgICAgIGludCBuaWQgPSBrZXlpZChuaixudCxuayk7CiAgICAgICAgICAgICAgICBhdXRvIGl0ID0gZHBbaSsxXS5maW5kKG5pZCk7CiAgICAgICAgICAgICAgICBpZihpdD09ZHBbaSsxXS5lbmQoKSB8fCBudyA8IGl0LT5zZWNvbmQpIGRwW2krMV1bbmlkXSA9IG53OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgdmkgYW5zOwogICAgZm9yKGludCBpPTE7aTw9bjtpKyspewogICAgICAgIGludCBpZCA9IGtleWlkKEEsQixDKTsKICAgICAgICBhdXRvIGl0ID0gZHBbaV0uZmluZChpZCk7CiAgICAgICAgaWYoaXQ9PWRwW2ldLmVuZCgpKSBjb250aW51ZTsKICAgICAgICBpZihhbnMuZW1wdHkoKSB8fCBpdC0+c2Vjb25kIDwgYW5zKSBhbnMgPSBpdC0+c2Vjb25kOwogICAgfQogICAgaWYoYW5zLmVtcHR5KCkpeyBjb3V0IDw8IC0xIDw8ICdcbic7IHJldHVybiAwOyB9CiAgICBmb3IoaW50IGk9MDtpPG47aSsrKXsKICAgICAgICBpZihpKSBjb3V0IDw8ICcgJzsKICAgICAgICBjb3V0IDw8IGFuc1tpXTsKICAgIH0KICAgIGNvdXQgPDwgJ1xuJzsKICAgIHJldHVybiAwOwp9Cg==