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: Wrong Answer)

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <stdbool.h>
typedef long long LL;
typedef long double Lf;
#define Rep(i,a,n)for(int i=(int)(a);i<(int)(n);i++)
#define rep(i,n)Rep(i,0,n)
#define Ma(x,y) ((x)>(y)?(x):(y))
#define mi(x,y) ((x)<(y)?(x):(y))
#define MOD 1000000007
int acs(const void* a, const void* b) { return *(int*)a - *(int*)b; } // 1,2,3,4
int des(const void* a, const void* b) { return *(int*)b - *(int*)a; } // 8,7,6,5
int cmp_char(const void* a, const void* b) { return *(char*)a - *(char*)b; } // a,b,c,d
int cmp_str(const void* a, const void* b) { return strcmp(*(const char**)a, *(const char**)b); } // aaa,aab

int mod(LL x) {
	//if (x == 26)return 26;
	return x % 26;
}

int main() {
	LL n;
	scanf("%lld", &n); n--;
	int dig[13] = { 0 };
	dig[0] = n % 26 + 1;

	Rep(i, 1, 12) {
		LL x = n;
		rep(j, i)x /= 26;
		dig[i] += mod(x);
	}
	/*dig[1] += mod(n / 26);
	dig[2] += mod(n / 26 / 26);
	dig[3] += mod(n / 26 / 26 / 26);
	dig[4] += mod(n / 26 / 26 / 26 / 26);
	dig[5] += mod(n / 26 / 26 / 26 / 26 / 26);
	dig[6] += mod(n / 26 / 26 / 26 / 26 / 26 / 26);
	dig[7] += mod(n / 26 / 26 / 26 / 26 / 26 / 26 / 26);
	dig[8] += mod(n / 26 / 26 / 26 / 26 / 26 / 26 / 26 / 26);
	dig[9] += mod(n / 26 / 26 / 26 / 26 / 26 / 26 / 26 / 26 / 26);
	dig[10] += mod(n / 26 / 26 / 26 / 26 / 26 / 26 / 26 / 26 / 26 / 26);
	dig[11] += mod(n / 26 / 26 / 26 / 26 / 26 / 26 / 26 / 26 / 26 / 26 / 26);*/
	rep(i, 12)if (dig[i] == 0 && dig[i + 1] == 1) { dig[i] = 26; dig[i + 1]--; }
	rep(i, 12)printf("%d", dig[i]);

	int digi = 0; LL si;
	while (n >= 0) {
		digi++;
		si = 1;
		rep(i, digi)si *= 26;
		n -= si;
	}

	char ans[13] = { 0 };
	rep(j, 12)ans[j] = dig[j] + 96;

	for (int k = digi - 1; k >= 0; k--)printf("%c", ans[k]);
}