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
#include <iostream>
#include <utility>
#include <tuple>

std::tuple<long, long, bool> cramer(long a, long b, long c, long d, long e, long f) {
  long x1 = e*d-b*f;
  long x2 = a*d-b*c;
  if (x1%x2 != 0) return {0,0,false};
  long y1 = a*f-e*c;
  long y2 = a*d-b*c;
  if (y1%y2 != 0) return {0,0,false};
  return {x1/x2, y1/y2, true};
}

struct Solution {
  long a,b;
  char x;
  char y;
};
// 3 4 5 6
// a c g o
Solution solutions[] = {
  {3,4,'a','c'},
  {4,5,'c','g'},
  {5,6,'g','o'}
};

int main() {
  std::ios_base::sync_with_stdio(0);
  long n,x = 0,y = 0;
  long* bt[2] = {&y, &x};
  std::cin >> n;
  std::string bits;
  std::cin >> bits;
  for (char c : bits) ++(*bt[c-'0']);

  std::string s = "NIE";
  for (auto sol : solutions) {
    auto[xx, yy, ok] = cramer(sol.a, sol.b, 8-sol.a, 8-sol.b, x, y);
    if (ok && xx >= 0 && yy >= 0) {
      s = std::string(xx, sol.x) + std::string(yy, sol.y);
      break;
    }
  }
  std::cout << s;
  return 0;
}