1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
#include <bits/stdc++.h>
using namespace std;

string ciag;
int jedynki_w_ciagu;
int n;
int jakie_min;
int jakie_max;
char literki[10];
int ile_liczb_rozbic;
vector <int> rozbicie;
string slowo;

void ile_jedynek_w_ciagu(){
    for(int i=0; i<ciag.size(); ++i){
        if(ciag[i]=='1'){
            ++jedynki_w_ciagu;
        }
    }

return;
}

int znajdz_min(int k){ // funkcja zwraca wartosc z ilu liczb najmniej mozna utworzyc dana liczbe dla podanego argumentu

    if(k%6 != 0){ // dodajemy 1
        jakie_min=(k/6)+1;
    }

    if(k%6 == 0) {// nie doddajemy 1
        jakie_min=k/6;
    }

    return jakie_min;
}

int znajdz_max(int k){ // funkcja zwraca wartosc z ilu liczb najwiecej mozna utworzyc dana liczbe dla podanego argumentu
    jakie_max=k/3;
    return jakie_max;
}

void rozbijanie_liczby(){ // rozbijanie liczby (jedynki w ciagu) na sume, tak aby powstaly a lub c lub lub g lub w
    int x=jedynki_w_ciagu;
    int w=x%6;

    while (x>5){
        rozbicie.push_back(6);
        x=x-6;
    }
    rozbicie.push_back(w);

return;
}

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    cin >> n;
    cin >> ciag;


    literki[3]='a';
    literki[4]='c';
    literki[5]='g';
    literki[6]='w';

    //ciag="1011111010101100011011011010001010100011111111110001001001011010";
    ile_jedynek_w_ciagu();

    if(n>znajdz_max(jedynki_w_ciagu) ){
        cout << "NIE\n";
        return 0;
    }
    if(n<znajdz_min(jedynki_w_ciagu) ){
        cout << "NIE\n";
        return 0;
    }

    ile_liczb_rozbic=n-jakie_min;
    rozbijanie_liczby();//rozbijanie liczby "jedynki w ciagu"
if(ile_liczb_rozbic!=0){
    for(int i=0; i<ile_liczb_rozbic; ++i){
        if(rozbicie[i] == 6){
            rozbicie.erase( rozbicie.begin() );
            rozbicie.push_back(3);
            rozbicie.push_back(3);
        }
    }
}


    for(int i=0; i<rozbicie.size(); ++i){
        if(rozbicie[i]!=0){
            slowo+=literki[rozbicie[i]];
        }
    }

    // debug
/*   for(int i=0; i<rozbicie.size(); ++i){
        cout << rozbicie[i] << " ";
    }
*/

    cout << slowo << "\n";
    return 0;
}