#include #include #include #include #include using namespace std ; using ll = long long ; int main(int argc, char *argv[]) { string p("SATELLITE") ; reverse(p.begin(), p.end()) ; // since unique is at start int pos = 0 ; int backcheck[256] ; for (int i=0; i<256; i++) backcheck[i] = -1 ; string s ; vector> toinc ; for (auto c: p) { int found = -1 ; for (int i=0; i<(int)s.size(); i++) if (c == s[i]) { found = i ; break ; } if (found < 0) { toinc.push_back({}) ; found = s.size() ; backcheck[(int)c] = found ; s.push_back(c) ; } toinc[found].push_back(pos) ; pos++ ; } vector k(p.size()) ; for (auto &v: toinc) reverse(v.begin(), v.end()) ; ll goal ; cin >> goal ; vector v ; string inc = p ; inc.pop_back() ; while (1) { for (auto c:inc) for (auto j: toinc[backcheck[(int)c]]) { if (j == 0) k[0]++ ; else k[j] += k[j-1] ; } if (k[k.size()-2] > goal) break ; v.push_back(k[k.size()-2]) ; } reverse(inc.begin(), inc.end()) ; string r ; for (int i=v.size()-1; i>=0; i--) { while (goal >= v[i]) { r.push_back(p[p.size()-1]) ; goal -= v[i] ; } r += inc ; } cout << r << endl ; }