func_code_string: #include <bits/stdc++.h>   using namespace std;   int R;   vector<int> hv, use;   vector<char> ans;   int req[1000005];   int fr[1000005];   int main() {     int n;     scanf( %d , &n);     if (n >= 1389)       R = 4;     else if (n >= 232)       R = 3;     else if (n >= 199)       R = 2;     else if (n >= 2)       R = 1;     else {       printf( a a n );       return 0;     }     for (int i = 0; i < R; i++) hv.push_back(0);     hv.push_back(1);     for (int i = R + 1;; i++) {       hv.push_back(hv.back() * i / (i - R));       if (hv.back() > n) break;     }     for (int &u : hv) u--;     for (int i = 0; i < 2 * R; i++) hv[i] = 0;     for (int i = 1; i <= n; i++) req[i] = 10000005;     for (int i = 0; i <= n; i++) fr[i] = -1;     for (int i = 1; i <= n; i++)       for (unsigned j = 0; j < hv.size(); j++)         if (hv[j] <= i) {           if (req[i - hv[j]] + j < req[i]) {             req[i] = req[i - hv[j]] + j;             fr[i] = j;           }         } else           break;     n--;     for (int i = n; i; i -= hv[fr[i]]) use.push_back(fr[i]);     for (unsigned i = 0; i < use.size(); i++)       for (int j = 0; j < R; j++) printf( %c ,  a  + i);     for (int i = use.size() - 1; i >= 0; i--)       for (int j = 2 * R; j < use[i]; j++) printf( %c ,  a  + i);     for (unsigned i = 0; i < use.size(); i++)       for (int j = 0; j < R; j++) printf( %c ,  a  + i);     printf(   );     for (unsigned i = 0; i < use.size(); i++)       for (int j = 0; j < R; j++) printf( %c ,  a  + i);     printf(  n );     return 0;   }   