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
/*
    Zadanie: Wersja dla profesjonalistów 
    Autor: Tomasz Kwiatkowski
*/

#include <bits/stdc++.h>
#define fi first
#define se second
#define pb push_back

using namespace std;
typedef long long ll;

const int MAXN = 1e6 + 7;
const int INF = 1e9 + 7;

string rep(string s, long long k, int st = 2)
{
    if (k == 0)
        return "";
    if (k == 1)
        return s;
    if (k <= 9)
        return string{k + '0'} + '[' + s + ']';
    string res = "";
    for (int i = 9; i >= st; --i) {
        if (k % i == 0) {
            string tmp = rep(s, k / i, i);
            if ((res.empty() && tmp.size()) || (tmp.size() && (3 + tmp.size() < res.size()))) {
                res = string{i + '0'} + '[' + tmp + ']';
            }
        }
        //if (res.size()) break;
    }
    if (res.size()) return res;
    return string{9 + '0'} + '[' + rep(s, k / 9) + ']' + rep(s, k % 9);
}

string rot(string s, int r)
{
    string res = "";
    for (auto c : s) {
        if ('A' <= c && c <= 'F')
            res += (char)('A' + (c - 'A' + r) % 6);
        else
            res += c;
    }
    return res;
}

string solve(long long n, int r)
{
    if (n == 1) return rot("A", r);
    if (n % 2) {
        string res;
        res = rep(rot("AE", r), n - 1) + rot("A", r) + rep(rot("C", r), n - 1);
        return res + solve(n - 1, r);
    }
    string res;
    res = rep(rep(rot("A", r), n / 2) + rot("E", r) + rep(rot("CE", r), n / 2 - 1), n / 2);
    string tmp = solve(n / 2, r);
    res += tmp;
    res += rot(tmp, 2);
    res += rep(rot("A", r), n / 2);
    return res;
}

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

    long long n;
    cin >> n;

    string res = rep("C", n) + solve(n, 0) + rep("E", n);
    cout << res << '\n';
    return 0;
}