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
110
111
112
113
114
115
116
#include <iostream>
#include <cstdio>
#include <string>
#include <bitset>
#include <cassert>

using namespace std;

constexpr auto MAX_LEN = 100000;
int n;
char input[8*MAX_LEN + 1000];


char result[10000];
int result_iter = 0;

void append(char c) {
    result[result_iter++] = c;
}

int main() {
    scanf("%d", &n);
    scanf("%s", input);

    int bits_zero = 0;
    int bits_one = 0;
    for (int i = 0; i < 8 * n; ++i) {
        if (input[i] == '0') {
            bits_zero++;
        } else if (input[i] == '1') {
            bits_one++;
        } else {
            exit(1);
        }
    }

    // for (int _bits_zero = 0; _bits_zero < 3000; ++_bits_zero) {
    //     for (int _bits_one = 0; _bits_one < 3000; ++_bits_one) {
    //         if ((_bits_zero + _bits_one) % 8 != 0) {
    //             continue;
    //         }
    //         n = (_bits_zero + _bits_one)/8;
    //         bits_one = _bits_one;
    //         bits_zero = _bits_zero;
            result_iter = 0;


//            printf("bits: 0:%d 1:%d\n", bits_zero, bits_one);

            // first 3 bits per word are constant - 011
            bits_zero -= n;
            bits_one -= 2 * n;

            // at least one bit per word is one
            bits_one -= n;

//            printf("bits: 0:%d 1:%d\n", bits_zero, bits_one);

            // largest  number of 'ones' - 6, letter 'o'
            // smallest number of 'ones' - 3, letter 'a'

            // without previously cut bits:
            // 'o' - 3ones, 1zeros
            // 'g' - 2ones, 2zeros
            // 'c' - 1ones, 3zeros
            // 'a' - 0ones, 4zeros

            while (bits_one <= bits_zero - 4 && bits_zero >= 0 && bits_one >= 0) {
                append('a');
                bits_one -= 0;
                bits_zero -= 4;
            }
            while (bits_one < bits_zero && bits_zero >= 0 && bits_one >= 0) {
                append('c');
                bits_one -= 1;
                bits_zero -= 3;
            }

            while (bits_one > bits_zero && bits_zero >= 0 && bits_one >= 0) {
                append('o');
                bits_one -= 3;
                bits_zero -= 1;
            }

            if (bits_one >= 0 && bits_one == bits_zero && bits_one % 2 == 0) {
                for (int i = 0; i < bits_one / 2; ++i) {
                    append('g');
                }
                append('\0');
                printf("%s\n", result);
                // std::string s(result);
                // int c_ones = 0;
                // int c_zeros = 0;
                // // cout << "out: "<< s << endl;
                // for (std::size_t i = 0; i < s.size(); ++i)
                // {
                //     auto bits = bitset<8>(s.c_str()[i]);
                //     // cout << "bits: " << bits << endl;
                //     c_ones += bits.count();
                //     c_zeros += 8 - bits.count();
                // }
                // if (c_ones != _bits_one || c_zeros != _bits_zero) {
                //     printf("bits: 0:%d 1:%d\n", _bits_zero, _bits_one);
                //     printf("%d != %d %d != %d\n", _bits_zero, c_zeros, _bits_one, c_ones);
                // }
                // assert(c_ones == _bits_one);
                // assert(c_zeros == _bits_zero);
            } else {
                printf("NIE\n");
            }
//            printf("\n");
    //     }
    // }

    return 0;
}