#include<bits/stdc++.h>
using namespace std;

int N;
int S[400010], ans[200010], cnt = 1;
vector<vector<int> > Doors;
vector<int> Cycle;

void prec() {
    Cycle = Doors[0];

    for(int i = 1; i < Doors.size(); i++) {
        ans[ Cycle.back() ] = cnt;
        ans[ Doors[i][0] ] = cnt;
        cnt++;

        Cycle.pop_back();
        for(int j = 1; j < Doors[i].size(); j++) {
            Cycle.push_back(Doors[i][j]);
        }
    }

    ans[ Cycle[0] ] = cnt;
    ans[ Cycle.back() ] = cnt;
    cnt++;

    Cycle.erase(Cycle.begin());
    Cycle.pop_back();
}

void solve() {
    for(int i = 0; i < (int)Cycle.size() - 3; i += 4) {
        ans[ Cycle[i] ] = cnt;
        ans[ Cycle[i + 2] ] = cnt;
        cnt++;

        ans[ Cycle[i + 1] ] = cnt;
        ans[ Cycle[i + 3] ] = cnt;
        cnt++;
    }

    int p = 0;
    for(int i = 0; i < 2 * N; i++) if(!ans[i]) {
        ans[i] = cnt;
        cnt += p;
        p ^= 1;
    }

    printf("Yes\n");
    for(int i = 0; i < 2 * N; i++) {
        printf("%d ", ans[i]);
    }
}

int main() {
    scanf("%d", &N);

    scanf("\n");
    for(int i = 1; i < 2 * N; i++) {
        char t; scanf("%c", &t);
        S[i] = t - '0';
    }

    S[0] = 1;
    for(int i = 0; i < 2 * N; i++) S[2 * N + i] = S[i];

    int p = -1;
    for(int i = 0; i < 2 * N; i++) if(!S[i]) {
        p = i;
        break;
    }
    if(p == -1) {
        if(N % 2) printf("No");
        else {
            for(int i = 0; i < 2 * N; i++) Cycle.push_back(i);
            solve();
        }
        return 0;
    }

    for(int i = p + 1; i <= 2 * N + p; i++) {
        if(!S[i - 1] && S[i]) {
            Doors.push_back(vector<int>());
            Doors.back().push_back((i + 2 * N - 1) % (2 * N));
        }
        if(S[i]) Doors.back().push_back(i % (2 * N));
    }

    int sum = 0;
    for(int i = 0; i < Doors.size(); i++) {
        sum += (int)Doors[i].size() - 2;
    }

    /*
    for(int i = 0; i < Doors.size(); i++) {
        for(int j = 0; j < Doors[i].size(); j++) {
            cout << Doors[i][j] << ' ';
        }
        cout << endl;
    }
    //*/

    if(sum % 2) {
        printf("No");
        return 0;
    }
    if(sum % 4 == 0) {
        prec();
        solve();
        return 0;
    }

    vector<int> tmp;
    for(int i = 0; i < Doors.size(); i++) if(Doors[i].size() > 2) {
        tmp.push_back(i);
    }

    if(tmp.size() < 2) {
        printf("No");
        return 0;
    }

    ans[ Doors[ tmp[0] ][ (int)Doors[ tmp[0] ].size() - 2 ] ] = cnt;
    ans[ Doors[ tmp[1] ][ (int)Doors[ tmp[1] ].size() - 2 ] ] = cnt;
    cnt++;

    Doors[ tmp[0] ].erase(Doors[ tmp[0] ].end() - 2);
    Doors[ tmp[1] ].erase(Doors[ tmp[1] ].end() - 2);
    swap(Doors[ tmp[0] ].back(), Doors[ tmp[1] ].back());

    prec();
    solve();
}
