Problem: Welcome to CODE FESTIVAL 2016! In order to celebrate this contest, find a string s that satisfies the following conditions:

* The length of s is between 1 and 5000, inclusive.
* s consists of uppercase letters.
* s contains exactly K occurrences of the string "FESTIVAL" as a subsequence. In other words, there are exactly K tuples of integers (i_0, i_1, ..., i_7) such that 0 ≤ i_0 < i_1 < ... < i_7 ≤ |s|-1 and s[i_0]='F', s[i_1]='E', ..., s[i_7]='L'.



It can be proved that under the given constraints, the solution always exists. In case there are multiple possible solutions, you can output any.

Constraints

* 1 ≤ K ≤ 10^{18}

Input

The input is given from Standard Input in the following format:


K


Output

Print a string that satisfies the conditions.

Examples

Input

7


Output

FESSSSSSSTIVAL


Input

256


Output

FFEESSTTIIVVAALL

Solution (in CPP):

Solution:
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <numeric>
#include <random>
#include <vector>
#include <array>
#include <bitset>
#include <queue>
#include <set>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <cassert>

using namespace std;
using ll = long long;
using ull = unsigned long long;
constexpr ll TEN(int n) { return (n==0) ? 1 : 10*TEN(n-1); }
int bsr(int x) { return 31 - __builtin_clz(x); }

string S = "FESTIVAL";
const int BS = 9;
const int BN = 1<<BS;

ll calc(string s) {
    ll d[9] = {};
    d[0] = 1;
    for (char c: s) {
        int p = -1;
        for (int i = 0; i < 8; i++) {
            if (c == S[i]) {
                p = i;
                break;
            }
        }
        if (p == -1) continue;
        d[p+1] += d[p];
//        for (int i = 0; i <= 8; i++) {
//            cout << d[i] << ", ";
//        } cout << endl;
    }
    return d[8];
}
int main() {
    ios::sync_with_stdio(0);
    cout << setprecision(20);
    ll k;
    cin >> k;

    string s = "FESTIVA";
    // 1,1,1...1

    ll sm = 0;
    for (int i = 0; i < 7; i++) {
        ll u = k % BN; k /= BN;
//        s += string(u, S[7]); // use
        if (u % 2) {
            s += S[7];
        }
        u /= 2;
        //x256
//        if (i == 6) break;
        for (int fe = 0; fe < BS; fe++) {
            for (int j = 6; j >= i+1; j--) {
                s += S[j];
            }
            ll c = 1<<(fe+1);
            c -= 1<<fe;
            s += string(c, S[i]);
            if (u % 2) {
                s += S[7];
            }
            u /= 2;
        }
//        cout << u << endl;
    }
//    cout << sm << endl;
    assert(s.size() <= 5000);
//    cout << s.size() << endl;
    cout << s << endl;
//    cout << calc(s) << endl;
    return 0;
}