Problem:
Score : 300 points

Problem Statement

1000000000000001 dogs suddenly appeared under the roof of Roger's house, all of which he decided to keep. The dogs had been numbered 1 through 1000000000000001, but he gave them new names, as follows:

the dogs numbered 1,2,\cdots,26 were respectively given the names a, b, ..., z;

the dogs numbered 27,28,29,\cdots,701,702 were respectively given the names aa, ab, ac, ..., zy, zz;

the dogs numbered 703,704,705,\cdots,18277,18278 were respectively given the names aaa, aab, aac, ..., zzy, zzz;

the dogs numbered 18279,18280,18281,\cdots,475253,475254 were respectively given the names aaaa, aaab, aaac, ..., zzzy, zzzz;

the dogs numbered 475255,475256,\cdots were respectively given the names aaaaa, aaaab, ...;

and so on.

To sum it up, the dogs numbered 1, 2, \cdots were respectively given the following names:

a, b, ..., z, aa, ab, ..., az, ba, bb, ..., bz, ..., za, zb, ..., zz, aaa, aab, ..., aaz, aba, abb, ..., abz, ..., zzz, aaaa, ...

Now, Roger asks you:

"What is the name for the dog numbered N?"

Constraints

N is an integer.

1 \leq N \leq 1000000000000001

Input

Input is given from Standard Input in the following format:

N

Output

Print the answer to Roger's question as a string consisting of lowercase English letters.

Sample Input 1

2

Sample Output 1

b

Sample Input 2

27

Sample Output 2

aa

Sample Input 3

123456789

Sample Output 3

jjddja

Solution in C++ (GCC 9.2.1) (judge verdict: Runtime Error)

#include <bits/stdc++.h>
#include <boost/multiprecision/cpp_int.hpp>

using boost::multiprecision::cpp_int;
using namespace std;

#if __has_include("print.hpp")
  #include "print.hpp"
#endif

#define rep(i, n) for(int i = 0; i < (int)(n); i++)
#define ALL(x) (x).begin(), (x).end()
#define RALL(x) (x).rbegin(), (x).rend()
#define MOD 1000000007

template<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return 1; } return 0; }
template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return 1; } return 0; }

typedef long long ll;
typedef pair<ll, ll> p;

class Radix {
private:
  const char* s;
  int a[12800];
public:
  Radix(const char* s = "ABCDEFGHIJKLMNOPQRSTUVWXYZ") : s(s) {
    int i;
    for(i = 0; s[i]; ++i)
      a[(int)s[i]] = i;
  }
  std::string to(long long p, int q) {
    int i;
    if(!p)
      return "A";
    char t[6400] = { };
    for(i = 62; p; --i) {
      t[i] = s[p % q];
      p /= q;
    }
    return std::string(t + i + 1);
  }
  std::string to(const std::string& t, int p, int q) {
    return to(to(t, p), q);
  }
  long long to(const std::string& t, int p) {
    int i;
    long long sm = a[(int)t[0]];
    for(i = 1; i < (int)t.length(); ++i)
      sm = sm * p + a[(int)t[i]];
    return sm;
  }
};

int main(){
  ios::sync_with_stdio(false);
  cin.tie(0);
  ll n;
  cin >> n;
  // Radix r;
  // n--;

  vector<int> res(200001, -1);
  vector<p> zero;
  int count = 0;
  while(n != 0){
    if(n % 26 == 0) res[count] = 26;
    else res[count] = n % 26;
    n -= 26;
    count++;
  }
  reverse(ALL(res));
  bool flag = false;
  int s = 0;
  for (int i = 0; i < 200001; ++i) {
    if(res[i] != 1) flag = true;
    if(res[i] == 0 && !flag) {
      zero.push_back({s, i});
      s = i;
      flag = false;
    }
  }


  s = 0;
  for (int i = 0; i < 200001; ++i) {
    if(zero.size() > s && i == zero[s].first ){
      for (int j = zero[s].first; j < zero[s].second; ++i) {
        cout << 'z';
      }
      s++;
    }
    if(res[i] == -1) continue;
    if(res[i] == 0) continue;
    cout << (char)('a' + (res[i]-1));
  }
  cout << endl;


  // ll num = 1;
  // ll count = 1;
  // ll mozi = 0;
  // while(count <= n){
  //   num *= 26;
  //   count += num;
  //   mozi++;
  // }
  // count -= num;
  //
  //
  // ll count2 = 1;
  // string res = "";
  // // while(mozi){
  // //   res += 'a' + ()
  // // }
  // cout << count << endl;
  // cout << mozi << endl;
  //
}