#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <string>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <unordered_set>
#include <unordered_map>
#include <sstream>
#include <complex>
#include <ctime>
#include <cassert>
#include <functional>

using namespace std;

typedef long long ll;
typedef vector<int> VI;
typedef pair<int,int> PII;

#define REP(i,s,t) for(int i=(s);i<(t);i++)
#define FILL(x,v) memset(x,v,sizeof(x))

const int INF = (int)1E9;
const string P = "ETILLETAS";
#define B 198
#define C 8

ll cc[B][C];
int cnt[B];
int M[B];
int main() {
  REP(i,0,B) {
    M[i] = i ? 2 : 1;
    if (i) REP(j,0,C) cc[i][j] = cc[i-1][j];
    REP(j,0,C) {
      REP(t,0,M[i]) {
        for (int k = C - 1; k >= 0; k--) {
          if (P[k] == P[j]) cc[i][k] += k ? cc[i][k - 1] : 1;
        }
      }
    }
    // { cerr << i << ": "; REP(j,0,C) cerr << cc[i][j] / 1e18 << " "; cerr << endl; }
  }
  ll k;
  cin >> k;
  for (int i = B - 1; i >= 0; i--) {
    if (k >= cc[i][C - 1]) {
      cnt[i] = k / cc[i][C - 1];
      k %= cc[i][C - 1];
    }
  }
  assert(k == 0);
  string ans = "";
  ll eCnt = 0;
  REP(i,0,B) {
    REP(j,0,C) REP(k,0,M[i]) ans += P[j];
    REP(j,0,cnt[i]) ans += P[C];
    eCnt += cnt[i];
    bool rem = false;
    REP(inxt,i+1,B) if (cnt[inxt]) rem = true;
    if (!rem) break;
  }
  ans += P.substr(C + 1);
  reverse(ans.begin(), ans.end());
  cout << ans << endl;
  // cerr << ans.size() << " " << eCnt << endl;
  return 0;
}
