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# (.NET Core 3.1.201) (judge verdict: Runtime Error)

using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using System.IO;

namespace AtCoder.C
{ 
    public class Program
    {
        public static void Main(string[] args)
        {
            var n = int.Parse(r());
            var sb = new StringBuilder();
            while(true)
			{
                var a = n / 26;
                var b = n % 26;
                if(a == 0)
				{
                    // あまりに対応する文字列を表示する
                    sb.Append(parse(b));
                    break;
				}   
                n = a;
                sb.Append(parse(b));
			}
            P(string.Concat(sb.ToString().Reverse()));

        }

        private static StreamReader sr;
        public static int[] Ecr()
        {
            if (sr == null)
            {
                sr = new StreamReader("input.txt", Encoding.GetEncoding("UTF-8"));
            }
            return sr.ReadLine().Split().Select(int.Parse).ToArray();
        }
        public static  int[] cr()
        {
            return Console.ReadLine().Split().Select(int.Parse).ToArray();
        }
        public static string Er()
        {
            if (sr == null)
            {
                sr = new StreamReader("input.txt", Encoding.GetEncoding("UTF-8"));
            }
            return sr.ReadLine();
        }
        public static string r()
        {
            return Console.ReadLine();
        }
        public static int cri()
        {
            return int.Parse(Console.ReadLine());
        }
        public static void P(string str)
        {
            Console.WriteLine(str);
        }
        public static void P(int num)
        {
            P(num.ToString());
        }
        public static string parse(int i)
		{
            switch(i)
			{
                case 1:
                    return "a";
                    break;
                case 2:
                    return "b";

                    break;
                case 3:
                    return "c";

                    break;
                case 4:
                    return "d";

                    break;
                case 5:
                    return "e";

                    break;
                case 6:
                    return "f";

                    break;
                case 7:
                    return "g";

                    break;
                case 8:
                    return "h";

                    break;
                case 9:
                    return "i";

                    break;
                case 10:
                    return "j";

                    break;
                case 11:
                    return "k";

                    break;
                case 12:
                    return "l";

                    break;
                case 13:
                    return "m";

                    break;
                case 14:
                    return "n";
                    break;
                case 15:
                    return "o";
                    break;
                case 16:
                    return "p";
                    break;
                case 17:
                    return "q";
                    break;
                case 18:
                    return "r";
                    break;
                case 19:
                    return "s";
                    break;
                case 20:
                    return "t";
                    break;
                case 21:
                    return "u";
                    break;
                case 22:
                    return "v";
                    break;
                case 23:
                    return "w";
                    break;
                case 24:
                    return "x";
                    break;
                case 25:
                    return "y";
                    break;
                case 26:
                    return "z";
                    break;
            }
            return "";
		}
    }
}