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 (Python):
def Convert(n):
    if n <= 26:
        return chr(n+96)
    elif n % 26 == 0:
        return Convert(n//26 - 1) + chr(122)
    else:
        return Convert(n//26) + chr(n%26+96)


N = int(input())
print(Convert(N))

Solution (Python):
import bisect
import string
N=int(input())

s=string.ascii_lowercase

k=1
lis=[0]
for i in range(11):
    k*=26
    lis.append(k+lis[-1])


keta=bisect.bisect(lis, N-1)


ans=''
n=N-lis[keta-1]-1
for i in range(keta):
    q,m=divmod(n,26)
    
    n=q
    ans+=s[m]
print(ans[::-1])

Solution (Python):
N = int(input())
A = ['z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
B = []
while N != 0:
        B.append(A[N % 26])
        if N % 26 != 0:
            N //= 26
        elif N % 26 == 0:
            N //= 26
            N -= 1

B.reverse()
C = ''
for i in range(len(B)):
    C += B[i]
print(C)

Solution (Python):
def num2alpha(num):
    if num <= 26:
        return chr(64 + num).lower()
    elif num % 26 == 0:
        return num2alpha(num // 26 - 1) + chr(90).lower()
    else:
        return num2alpha(num // 26) + chr(64 + num % 26).lower()


n = int(input())
print(num2alpha(n))

Solution (Python):
from bisect import bisect_left
n = int(input())
ans_list = []
flag = True
while flag:
    if n % 26 == 0:
        ans_list.append(26)
        n //= 26
        n -= 1
    else:
        ans_list.append(n % 26)
        n //= 26
    if n == 0:
        flag = False

ans_list = ans_list[::-1]
str_list = []
for x in ans_list:
    str_list.append(chr(x + 96))

print(''.join(str_list))

Solution (Python):
n = int(input())
s = ""
while n:
    n -= 1
    s = chr(n % 26 + ord("a")) + s
    n //= 26
print(s)

Solution (Python):
n = int(input())
s = ""
while n:
    n -= 1
    s = "".join([chr(n % 26 + ord("a")), s])
    n //= 26
print(s)

Solution (Python):
n = int(input())
alp = 'abcdefghijklmnopqrstuvwxyz'


min_n = 0
max_n = 26
l = 0
while min_n < n <= max_n:
    min_n += max_n
    max_n += max_n * 26
    l += 1


m = n - min_n - 1
ans = ''
while m >= 26:
    ans = alp[m % 26] + ans
    m = m // 26 - 1
ans = alp[m] + ans

while len(ans) < l:
    ans = 'a' + ans

print(ans)

Solution (Python):
import math
import sys
readline = sys.stdin.readline


def main():
    alpha = 'abcdefghijklmnopqrstuvwxyz'
    n = int(readline().rstrip())
    arr = []
    a = n
    for i in range(100):
        if a % 26 == 0:
            b = a // 26 - 1
            c = 26
        else:
            b = a // 26
            c = a % 26
        a = b
        arr.insert(0, c)

        if b == 0:
            break

    string = ''
    for l in range(len(arr)):
        string += alpha[arr[l] - 1]
    print(string)


if __name__ == '__main__':
    main()

Solution (Python):
def main():
    n = int(input())
    ans  = ""
    while n != 0:
        n -= 1
        ans += chr(ord('a') + n % 26)
        n //= 26
    print(ans[::-1])

if __name__ == "__main__":
    main()

Solution (Python):
n = int(input())
alp = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]
name = ''
while n != 0:
    name += alp[(n-1) % 26]
    n = (n-1) // 26
print(name[::-1])

Solution (Python):
n = int(input())
syou = n
n26 = []
while syou:
  amari = syou % 26
  syou = syou // 26
  n26.append(amari)
for i in range(len(n26)):
  if n26[i] <= 0:
    if i == len(n26)-1:
      n26.pop()
      break
    n26[i] += 26
    n26[i+1] -= 1
answer = ""
for i in range(len(n26)-1, -1, -1):
  answer += chr(n26[i]+96)
print(answer)

Solution (Python):
alpa = 'zabcdefghijklmnopqrstuvwxy'
N = int(input())


ans = []
while N >= 27:
    ans.append(alpa[N%26])
    N = (N-1)//26

ans.append(alpa[N%26])
ans.reverse()
print(*ans, sep='')

Solution (Python):
from functools import reduce
from fractions import gcd
import math
import bisect
import itertools
import sys
sys.setrecursionlimit(10**7)
input = sys.stdin.readline
INF = float("inf")



def main():
    N = int(input())

    ans = ""
    while N > 0:
        N -= 1
        ans += chr(ord('a') + N % 26)
        N //= 26
    
    print(ans[::-1])


if __name__ == '__main__':
    main()

Solution (Python):
n = int(input())
ans = ""
while n > 0:
    n -= 1
    ans += chr(ord('a') + n % 26)
    n //= 26

print(ans[::-1])

Solution (Python):
n = int(input())
name = []

while(n != 0):
    a = n % 26
    if a == 0:
        a = 26
    name.append(chr(96+a))
    n = (n-a) // 26

name.reverse()
print(''.join(name))

Solution (Python):
n=int(input())

def num2alpha(num):
    if num<=26:
        return chr(64+num)
    elif num%26==0:
        return num2alpha(num//26-1)+chr(90)
    else:
        return num2alpha(num//26)+chr(64+num%26)

print(num2alpha(n).lower())

Solution (Python):
def get_digit_num(num):
    num -= 1
    if num < 26:
        return 1,num
    prev_last,digit_num = 25,2
    while True:
        if (prev_last < num < prev_last + (26 ** digit_num) + 1):
            num -= prev_last + 1
            break
        prev_last = prev_last + (26 ** digit_num)
        digit_num += 1
    return digit_num,num

def get_word(digit_num,num_n_digits):
    alpha_arr = [(chr(ord("a") + i)) for i in range(0,26)]
    idx_arr = [0] * digit_num
    for i in range(digit_num-1,-1,-1):
        idx_arr[i] = num_n_digits % 26
        num_n_digits = int(num_n_digits / 26)
    return "".join([alpha_arr[idx_arr[i]] for i in range(digit_num)])

    
if __name__ == "__main__":
    num = int(input())
    digit_num,num_n_digits = get_digit_num(num)
    print(get_word(digit_num,num_n_digits))

Solution (Python):


import itertools
import collections
from decimal import Decimal





def main():
    n = int(input())
    ans = ''
    for i in range(1, 99):
        if n <= 26 ** i:
            n -= 1
            for j in range(i):
                ans += chr(ord('a') + n % 26)
                n //= 26
            break
        else:
            n -= 26 ** i

    print(ans[::-1])

def prime_factorize(n):
    a = []
    while n % 2 == 0:
        a.append(2)
        n //= 2
    f = 3
    while f * f <= n:
        if n % f == 0:
            a.append(f)
            n //= f
        else:
            f += 2
    if n != 1:
        a.append(n)
    return a

def bfs(H, W, black_cells, dist):
    d = 0
    while black_cells:
        h, w = black_cells.popleft()
        d = dist[h][w]
        for dy, dx in ((1, 0), (0, 1), (-1, 0), (0, -1)):
            new_h = h + dy
            new_w = w + dx
            if new_h < 0 or H <= new_h or new_w < 0 or W <= new_w:
                continue
            if dist[new_h][new_w] == -1:
                dist[new_h][new_w] = d + 1
                black_cells.append((new_h, new_w))
    return d


def input_list():
    return list(map(Decimal, input().split()))


def input_list_str():
    return list(map(str, input().split()))


if __name__ == "__main__":
    main()

Solution (Python):
import sys
import numpy as np
from heapq import heappush, heappop 
from bisect import bisect_left as bi_l, bisect_right as bi_r
from collections import deque, Counter, defaultdict
from itertools import combinations, product
inf = float('inf')
MOD = 10**9+7



class NumberTheory():
  def __init__(self, n=2*10**6, numpy=True):
    self.n = n
    self.np_flg = numpy 
    self.is_prime_number, self.prime_numbers = self.sieve_of_eratosthenes(n)
  
  def sieve_of_eratosthenes(self, n):
    if self.np_flg:
      sieve = np.ones(n+1, dtype=np.int64); sieve[:2] = 0
      for i in range(2, int(n**.5)+1):
        if sieve[i]: sieve[i*2::i] = 0
      prime_numbers = np.flatnonzero(sieve)
    else:
      sieve = [1] * (n+1); sieve[0] = sieve[1] = 0
      for i in range(2, int(n**.5)+1):
        if not sieve[i]: continue
        for j in range(i*2, n+1, i): sieve[j] = 0
      prime_numbers = [i for i in range(2, n+1) if sieve[i]]
    return sieve, prime_numbers 

  def prime_factorize(self, n):
    res = dict()
    if n < 2: return res
    border = int(n**.5)
    for p in self.prime_numbers:
      if p > border: break
      while n % p == 0: res[p] = res.get(p, 0)+1; n //= p
      if n == 1: return res
    res[n] = 1; return res

  def prime_factorize_factorial(self, n):
    res = dict()
    for i in range(2, n+1):
      for p, c in self.prime_factorize(i).items(): res[p] = res.get(p, 0)+c
    return res
  
  @staticmethod
  def gcd(a, b): return gcd(b, a%b) if b else abs(a)

  @staticmethod
  def lcm(a, b): return abs(a // gcd(a, b) * b)

  @staticmethod
  def find_divisors(n):
    divisors = []
    for i in range(1, int(n**.5)+1):
      if n%i: continue
      divisors.append(i)
      j = n // i
      if j != i: divisors.append(j)
    return divisors
  
  @staticmethod
  def base_convert(n, b):
    if not n: return [0]
    res = []
    while n:
      n, r = divmod(n, b)
      if r < 0: n += 1; r -= b
      res.append(r)
    return res


class UnionFind():
  def __init__(self, n=10**6):
    self.root = list(range(n))
    self.height = [0] * n 
    self.size = [1] * n 
  
  def find_root(self, u):
    if self.root[u] == u: return u
    self.root[u] = self.find_root(self.root[u])
    return self.root[u]
  
  def unite(self, u, v):
    ru = self.find_root(u)
    rv = self.find_root(v)
    if ru == rv: return 
    hu = self.height[ru]
    hv = self.height[rv]
    if hu >= hv:
      self.root[rv] = ru 
      self.size[ru] += self.size[rv]
      self.height[ru] = max(hu, hv+1)
    else:
      self.root[ru] = rv 
      self.size[rv] += self.size[ru]


class Combinatorics():
  def __init__(self, N=10**9, n=10**6, mod=10**9+7, numpy=True):
    self.mod = mod
    self.nCr = dict()
    self.np_flg=numpy
    self.make_mod_tables(N, n)

  sys.setrecursionlimit(10**6)
  def choose(self, n, r, mod=None): 
    if r > n or r < 0: return 0
    if r == 0: return 1
    if (n, r) in self.nCr: return self.nCr[(n, r)]
    if not mod:
      self.nCr[(n, r)] = (self.choose(n-1, r) + self.choose(n-1, r-1))
    else:
      self.nCr[(n, r)] = (self.choose(n-1, r, mod) + self.choose(n-1, r-1, mod)) % mod
    return self.nCr[(n,r)]
  
  def cumprod(self, a):
    p = self.mod
    l = len(a); sql = int(np.sqrt(l)+1)
    a = np.resize(a, sql**2).reshape(sql, sql)
    for i in range(sql-1): a[:, i+1] *= a[:, i]; a[:, i+1] %= p
    for i in range(sql-1): a[i+1] *= a[i, -1]; a[i+1] %= p
    return np.ravel(a)[:l]

  def make_mod_tables(self, N, n):
    p = self.mod
    if self.np_flg:
      fac = np.arange(n+1); fac[0] = 1; fac = self.cumprod(fac)
      ifac = np.arange(n+1, 0, -1); ifac[0] = pow(int(fac[-1]), p-2, p)
      ifac = self.cumprod(ifac)[n::-1]
      n_choose = np.arange(N+1, N-n, -1); n_choose[0] = 1;
      n_choose[1:] = self.cumprod(n_choose[1:])*ifac[1:n+1]%p
    else:
      fac = [None]*(n+1); fac[0] = 1
      for i in range(n): fac[i+1] = fac[i]*(i+1)%p
      ifac = [None]*(n+1); ifac[n] = pow(fac[n], p-2, p)
      for i in range(n, 0, -1): ifac[i-1] = ifac[i]*i%p
      n_choose = [None] * (n+1); n_choose[0] = 1
      for i in range(n): n_choose[i+1] = n_choose[i]*(N-i)%p
      for i in range(n+1): n_choose[i] = n_choose[i]*ifac[i]%p
    self.fac, self.ifac, self.mod_n_choose = fac, ifac, n_choose


def z_algorithm(s):
  n = len(s)
  a = [0] * n; a[0] = n
  l = r = -1
  for i in range(1, n):
    if r >= i: a[i] = min(a[i-l], r-i)
    while i + a[i] < n and s[i+a[i]] == s[a[i]]: a[i] += 1
    if i+a[i] >= r: l, r = i, i+a[i]
  return a


class ABC001():
  def A():
    h1, h2 = map(int, sys.stdin.read().split())
    print(h1-h2)

  def B(): pass
  def C(): pass 
  def D(): pass 


class ABC002():
  def A():
    x, y = map(int, sys.stdin.readline().split())
    print(max(x, y))

  def B():
    vowels = set('aeiou')
    s = sys.stdin.readline().rstrip() 
    t = ''
    for c in s:
      if c in vowels: continue 
      t += c 
    print(t)

  def C():
    *coords, = map(int, sys.stdin.readline().split())
    def triangle_area(x0, y0, x1, y1, x2, y2):
      x1 -= x0; x2 -= x0; y1 -= y0; y2 -= y0;
      return abs(x1*y2 - x2*y1) / 2
    print(triangle_area(*coords))

  def D():
    n, m = map(int, sys.stdin.readline().split())
    edges = set()
    for _ in range(m):
      x, y = map(int, sys.stdin.readline().split())
      x -= 1; y -= 1
      edges.add((x, y))
    cand = []
    for i in range(1, 1<<n):
      s = [j for j in range(n) if i>>j & 1]
      for x, y in combinations(s, 2):
        if (x, y) not in edges: break
      else:
        cand.append(len(s))
    print(max(cand))


class ABC003():
  def A():
    n = int(sys.stdin.readline().rstrip())
    print((n+1)*5000)

  def B():
    atcoder = set('atcoder')
    s, t = sys.stdin.read().split()
    for i in range(len(s)):
      if s[i] == t[i]: continue
      if s[i] == '@' and t[i] in atcoder: continue 
      if t[i] == '@' and s[i] in atcoder: continue
      print('You will lose')
      return 
    print('You can win')

  def C():
    n, k, *r = map(int, sys.stdin.read().split())
    res = 0
    for x in sorted(r)[-k:]:
      res = (res+x) / 2
    print(res)

  def D(): pass 


class ABC004():
  def A():
    print(int(sys.stdin.readline().rstrip())*2)

  def B():
    c = [sys.stdin.readline().rstrip() for _ in range(4)]
    for l in c[::-1]:
      print(l[::-1])

  def C():
    n = int(sys.stdin.readline().rstrip())
    n %= 30
    res = list(range(1, 7))
    for i in range(n):
      i %= 5
      res[i], res[i+1] = res[i+1], res[i]
    print(''.join(map(str, res)))

  def D(): pass 


class ABC005():
  def A():
    x, y = map(int, sys.stdin.readline().split())
    print(y//x)

  def B():
    n, *t = map(int, sys.stdin.read().split())
    print(min(t))

  def C():
    t = int(sys.stdin.readline().rstrip())
    n = int(sys.stdin.readline().rstrip())
    a = [int(x) for x in sys.stdin.readline().split()]
    m = int(sys.stdin.readline().rstrip())
    b = [int(x) for x in sys.stdin.readline().split()]
    i = 0
    for p in b:
      if i == n: print('no'); return 
      while p-a[i] > t:
        i += 1
        if i == n: print('no'); return 
      if a[i] > p: print('no'); return 
      i += 1
    print('yes')

  def D():
    n = int(sys.stdin.readline().rstrip())
    d = np.array([sys.stdin.readline().split() for _ in range(n)], np.int64)
    s = d.cumsum(axis=0).cumsum(axis=1)
    s = np.pad(s, 1)
    max_del = np.zeros((n+1, n+1), dtype=np.int64)
    for y in range(1, n+1):
      for x in range(1, n+1):
        max_del[y, x] = np.amax(s[y:n+1, x:n+1] - s[0:n-y+1, x:n+1] - s[y:n+1, 0:n-x+1] + s[0:n-y+1, 0:n-x+1])
    res = np.arange(n**2+1)[:, None]
    i = np.arange(1, n+1)
    res = max_del[i, np.minimum(res//i, n)].max(axis=1)
    q = int(sys.stdin.readline().rstrip())
    p = np.array(sys.stdin.read().split(), dtype=np.int64)
    print(*res[p], sep='\n')


class ABC006():
  def A():
    n = sys.stdin.readline().rstrip()
    if '3' in n: print('YES')
    elif int(n)%3 == 0: print('YES')
    else: print('NO')

  def B():
    mod = 10007
    t = [0, 0, 1]
    for _ in range(1001001):
      t.append(t[-1]+t[-2]+t[-3]); t[-1] %= mod
    n = int(sys.stdin.readline().rstrip())
    print(t[n-1])
    
  def C():
    n, m = map(int, sys.stdin.readline().split())
    cnt = [0, 0, 0]
    if m == 1: cnt = [-1, -1, -1]
    else:
      if m & 1: m -= 3; cnt[1] += 1; n -= 1
      cnt[2] = m//2 - n 
      cnt[0] = n - cnt[2]
    if cnt[0]<0 or cnt[1]<0 or cnt[2]<0: print(-1, -1, -1)
    else: print(*cnt, sep=' ')
      
  def D():
    n, *c = map(int, sys.stdin.read().split())
    lis = [inf]*n 
    for x in c: lis[bi_l(lis, x)] = x 
    print(n - bi_l(lis, inf))


class ABC007():
  def A():
    n = int(sys.stdin.readline().rstrip())
    print(n-1)

  def B():
    s = sys.stdin.readline().rstrip()
    if s == 'a': print(-1)
    else: print('a')

  def C():
    r, c = map(int, sys.stdin.readline().split())
    sy, sx = map(int, sys.stdin.readline().split())
    gy, gx = map(int, sys.stdin.readline().split())
    sy -= 1; sx -=1; gy -= 1; gx -= 1
    maze = [sys.stdin.readline().rstrip() for _ in range(r)]
    queue = deque([(sy, sx)])
    dist = np.full((r, c), np.inf); dist[sy, sx] = 0
    while queue:
      y, x = queue.popleft()
      for i, j in [(-1, 0), (1, 0), (0, -1), (0, 1)]:
        i += y; j += x
        if maze[i][j] == '
        dist[i, j] = dist[y, x] + 1
        queue.append((i, j))
    print(int(dist[gy, gx]))
  
  def D(): pass 


class ABC008():
  def A():
    s, t = map(int, sys.stdin.readline().split())
    print(t-s+1)

  def B():
    n, *s = sys.stdin.read().split()
    res = defaultdict(int)
    for name in s: res[name] += 1
    print(sorted(res.items(), key=lambda x: x[1])[-1][0])

  def C():
    n, *a = map(int, sys.stdin.read().split())
    a = np.array(a)
    c = n - np.count_nonzero(a[:, None]%a, axis=1)
    print(np.sum((c+1)//2/c))
  
  def D(): pass

class ABC009():
  def A():
    n = int(sys.stdin.readline().rstrip())
    print((n+1)//2)

  def B():
    n, *a = map(int, sys.stdin.read().split())
    print(sorted(set(a))[-2])
    
  def C():
    n, k = map(int, sys.stdin.readline().split())
    s = list(sys.stdin.readline().rstrip())
    cost = [1]*n
    r = k
    for i in range(n-1):
      q = []
      for j in range(i+1, n):
        if s[j] < s[i] and cost[i]+cost[j] <= r:
          heappush(q, (s[j], cost[i]+cost[j], -j))
      if not q: continue
      _, c, j = heappop(q); j = -j 
      s[i], s[j] = s[j], s[i]
      r -= c 
      cost[i] = cost[j] = 0
    print(''.join(s))
      
  def D(): pass 


class ABC010():
  def A():
    print(sys.stdin.readline().rstrip()+'pp')
  def B():
    n, *a = map(int, sys.stdin.read().split())
    tot = 0
    for x in a:
      c = 0 
      while x%2==0 or x%3==2:
        x -= 1
        c += 1
      tot += c
    print(tot)

  def C():
    sx, sy, gx, gy, t, v, n, *xy = map(int, sys.stdin.read().split())
    x, y = np.array(xy).reshape(-1, 2).T
    def dist(x1, y1, x2, y2):
      return np.sqrt((x2-x1)**2 + (y2-y1)**2)
    ans = 'YES' if (dist(sx, sy, x, y)+dist(x, y, gx, gy) <= v*t).any() else 'NO'
    print(ans)

  def D(): pass 

class ABC011():
  def A():
    n = int(sys.stdin.readline().rstrip())
    print(n%12+1)

  def B():
    s = sys.stdin.readline().rstrip() 
    print(s[0].upper()+s[1:].lower())

  def C():
    n, *ng = map(int, sys.stdin.read().split())
    ng = set(ng)
    if n in ng: print('NO')
    else:
      r = 100
      while n > 0:
        if r == 0: print('NO'); return
        for i in range(3, 0, -1):
          if (n-i) in ng: continue 
          n -= i
          r -= 1
          break 
        else: print('NO'); return 
      print('YES')

  def D(): pass 


class ABC170():
  def A():
    x = [int(x) for x in sys.stdin.readline().split()]
    for i in range(5):
      if x[i] != i+1:
        print(i+1)
        break

  def B():
    x, y = map(int, sys.stdin.readline().split())
    print('Yes' if 2*x <= y <= 4*x and y%2 == 0 else 'No')
      
  def C():
    x, n, *p = map(int, sys.stdin.read().split())
    a = list(set(range(102)) - set(p))
    a = [(abs(y-x), y) for y in a]
    print(sorted(a)[0][1])

  def D():
    n, *a = map(int, sys.stdin.read().split())
    cand = set(a)
    cnt = 0
    for x, c in sorted(Counter(a).items()):
      cnt += c == 1 and x in cand
      cand -= set(range(x*2, 10**6+1, x))
    print(cnt)

  def E():
    n, q = map(int, sys.stdin.readline().split())
    queue = [] 
    num_kindergarten = 2*10**5
    queue_kindergarten = [[] for _ in range(num_kindergarten)]
    highest_kindergarten = [None] * num_kindergarten
    where = [None] * n
    rate = [None] * n

    def entry(i, k):
      where[i] = k
      while queue_kindergarten[k]:
        r, j = heappop(queue_kindergarten[k])
        if where[j] != k or j == i: continue 
        if rate[i] >= -r:
          highest_kindergarten[k] = rate[i]
          heappush(queue, (rate[i], k, i))
        heappush(queue_kindergarten[k], (r, j))
        break
      else:
        highest_kindergarten[k] = rate[i]
        heappush(queue, (rate[i], k, i))
      heappush(queue_kindergarten[k], (-rate[i], i))

    def transfer(i, k):
      now = where[i]
      while queue_kindergarten[now]:
        r, j = heappop(queue_kindergarten[now])
        if where[j] != now or j == i: continue
        if highest_kindergarten[now] != -r:
          highest_kindergarten[now] = -r
          heappush(queue, (-r, now, j))
        heappush(queue_kindergarten[now], (r, j))
        break
      else:
        highest_kindergarten[now] = None
      entry(i, k)

    def inquire():
      while True:
        r, k, i = heappop(queue)
        if where[i] != k or r != highest_kindergarten[k]: continue 
        heappush(queue, (r, k, i))
        return r

    for i in range(n):
      a, b = map(int, sys.stdin.readline().split())
      rate[i] = a 
      entry(i, b-1)
    for _ in range(q):
      c, d = map(int, sys.stdin.readline().split())
      transfer(c-1, d-1)
      print(inquire())
    
  def F(): pass 


class ABC171():
  def A():
    c = sys.stdin.readline().rstrip()
    print('A' if c < 'a' else 'a')

  def B():
    n, k, *p = map(int, sys.stdin.read().split())
    print(sum(sorted(p)[:k]))

  def C():
    n = int(sys.stdin.readline().rstrip())
    n -= 1
    l = 1
    while True:
      if n < pow(26, l):
        break 
      n -= pow(26, l)
      l += 1
    res = ''.join([chr(ord('a')+d%26) for d in NumberTheory.base_convert(n, 26)][::-1])
    res = 'a'*(l-len(res)) + res
    print(res)

  def D(): pass 
  def E(): pass 
  def F(): pass 

if __name__ == '__main__':
  ABC171.C()

Solution (Python):
n = int(input())
ans = ""
while n:
	n -= 1
	ans += chr(97 + n % 26)
	n //= 26
print(ans[::-1])

Solution (Python):
n = int(input())
a = "abcdefghijklmnopqrstuvwxyz"
d = 0
while n > 0:
    d += 1
    n -= 26 ** d
n += 26 ** d-1
s = ""
while d:
    s = s + a[n % 26]
    n = n // 26
    d -= 1
print(s[::-1])

Solution (Python):
N = int(input())

def name(n):
    if n == 0:
        return ''
    n -= 1
    return name(n//26) + chr(ord('a') + n % 26)

print(name(N))

Solution (Python):

N = int(input())
alphabets = 'abcdefghijklmnopqrstuvwxyz'

name = ''

while N > 0:
    mod = N % 26
    if mod == 0:
        mod = int(26)
    name = alphabets[int(mod-1)] + name
    N -= 0.1
    N //= 26


print(name)

Solution (Python):
N = int(input())
ans = ''
while N > 0:
	N -= 1
	ans += chr(ord('a') + N % 26)
	N //= 26
print(ans[::-1])

Solution (Python):
import itertools
import string

n = int(input())
alphabets = string.ascii_lowercase

digit = 0
counter = 0
while counter < n:
	digit += 1
	counter += 26**digit

answer = ""
for d in range(digit):
	if d == 0:
		alphabet = n % 26 - 1
		if alphabet == -1:
			alphabet = 25
		answer = alphabets[alphabet] + answer
		n = n - alphabet
	else:
		n = n // 26
		alphabet =  n % 26 - 1
		if alphabet == -1:
			alphabet = 25
		answer = alphabets[alphabet] + answer
		n = n - alphabet

print(answer)

Solution (Python):
N = int(input())
ans=''
while N>0:
    N -= 1
    ans += chr(ord('a') + N % 26)
    N //= 26
print(ans[::-1])

Solution (Python):
N = int(input())
c,I,ans = 0,1,[]
lis = 'abcdefghijklmnopqrstuvwxyz'

I_=0
while 26**I+I_<N:
  I_+=26**I
  I+=1
  
for i in range(I):
  N,mod = divmod(int(N),26)
  if mod == 0:
    N-=1
  
  
  ans.append(lis[mod-1])

ans.reverse()
print(''.join(ans))

Solution (Python):
N=int(input())
Al=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
s=''
M=[26**i for i in range(12)]
k=0
for i in range(12):
    k=k+M[i]
    if N<k:
        m=k-M[i]
        N=N-m
        L=[0]
        n=0
        for j in range(1, i+1):
            L.append(N%M[j])
            s=Al[(L[j]-L[j-1])//M[j-1]]+s
        break
print(s)

Solution (Python):
N = int(input())

S = "abcdefghijklmnopqrstuvwxyz"

ans = ""
while N > 0:
    N -= 1
    ans += S[N%26]
    N //= 26

print(ans[::-1])

Solution (Python):
import math

n = int(input())
alp = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
name = ''

while n > 0:
  n -= 1
  name = alp[n % 26] + name
  n = n // 26
  
print(name)

Solution (Python):
def c171(n):

    ans = ""
    while n > 0:
        n -= 1
        ans += chr(ord('a') + n % 26)
        n //= 26

    return ans[::-1]

def main():
    n = int(input())
    print(c171(n))

if __name__ == '__main__':
    main()

Solution (Python):
def c171(n):

    ans = ""
    while n > 0:
        n -= 1
        ans += chr(ord('a') + n % 26)
        n //= 26

    return ans[::-1]

def main():
    n = int(input())
    print(c171(n))

if __name__ == '__main__':
    main()

Solution (Python):
N = int(input())
ans = ''
for i in range(1,99):
    if N <= 26**i:
        N-=1
        for j in range(i):
            ans+=chr(ord('a')+N%26)
            N//=26
        break
    else:
        N-=26**i
print(ans[::-1])

Solution (Python):
n=int(input())
l=list("abcdefghijklmnopqrstuvwxyz")
name=""
while n>=1:
    name=(l[(n-1)%26])+name
    n=(n-1)//26
print(name)

Solution (Python):
'''
.append(要素) リストに要素を追加
.extend(リスト) リストを連結する
.insert(場所,要素) 指定した場所に要素追加
del 配列名[場所]
-1で末尾で末尾から一つ前
sort()
sorted(reverse=true)
配列の初期化
配列名=[a]*n+[b]*m
Decimal()
'''

from sys import stdin
from itertools import accumulate, dropwhile, takewhile, groupby
import bisect
import copy
import math
from functools import reduce
from operator import mul
from collections import Counter
import itertools
import fractions
import sys


def tes(n):
    return int((26**(n+1)-1)/(26-1))


n = int(stdin.readline().rstrip())
b = n
data1 = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l',
         'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
data2 = []
for el in range(1, 16):
    data2.append('a'*el)
d = []
pos = 0
for el in range(12):
    d.append(tes(el))
for el in range(len(d)):
    if n < d[el]:
        pos = el-1
        break
num = d[pos]
diff = n-num
de = []
counter = 16
while True:
    de.append(diff % 26)
    diff = int(diff/26)
    counter -= 1
    if counter == 0:
        break
stri = data2[pos]
res = ''
count = 0
for el in stri:
    res += data1[de[count]]
    count += 1
print(''.join(list(reversed(res))))

Solution (Python):



n = int(input())

ans = []

while n > 0:
    if n % 26 != 0:
        ans.append(chr(ord('a') + n % 26 - 1))
    else:
        ans.append('z')
        n -= 1
    n //= 26

print("".join(ans[::-1]))

Solution (Python):
n = int(input())-1
result = ''

for i in range(1, 15):
    if n >= 26**i:
        n -= 26**i
        continue
    for j in range(i):
        r = n % 26
        n //= 26
        result += chr(ord('a') + r)
    break
print(result[::-1])

Solution (Python):
N = int(input())
ans = ""

while N > 0:
	N -= 1
	ans += chr(ord('a') + N % 26)
	N //= 26

print(ans[::-1])

Solution (Python):

import sys, math
from itertools import permutations, combinations
from collections import defaultdict, Counter, deque
from math import factorial
from bisect import bisect_left, bisect_right 
sys.setrecursionlimit(10**7)
enu = enumerate
MOD = 10**9+7
def input(): return sys.stdin.readline()[:-1]
pl = lambda x: print(*x, sep='\n')

N = int(input())
alphabet = [chr(i) for i in range(97, 97+27)]
tss = [26**i for i in range(1, 12)]

for ind, ts in enu(tss):
    if ts < N:
        N -= ts
    else:
        break
keta = ind + 1


moji = ''
N -= 1

for ket in range(keta):
    N, mod = divmod(N, 26)
    
    moji += alphabet[mod]
moji = ''.join(list(reversed(moji)))
print(moji)

Solution (Python):
N = int(input())
al = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]
k = -1
sum = []
for i in range(13):
  k += 26**i
  sum.append(k)
j = 0
while sum[j]<N:
  j += 1

N += -sum[j-1]-1
ans = ""
for m in range(j):
  z = N//(26**(j-m-1))
  N += -26**(j-m-1)*z
  ans+=al[z]
print(ans)

Solution (Python):
n=int(input())
x=1
X='abcdefghijklmnopqrstuvwxyz'
for i in range(1,100):
    if x<=n<x+26**i:
        n-=x
        cnt=i
        break
    else:
        x+=26**i
ans=''
for i in range(cnt):
    ans=ans+X[n%26]
    n//=26

print(ans[::-1])

Solution (Python):
n=int(input())
x=1
X='abcdefghijklmnopqrstuvwxyz'
for i in range(1,100):
    if x<=n<x+26**i:
        n-=x
        cnt=i
        break
    else:
        x+=26**i
ans=''
for i in reversed(range(cnt)):
    ans+=X[n//(26**i)]
    n%=(26**i)
print(ans)

Solution (Python):
N = int(input())
X = 'abcdefghijklmnopqrstuvwxyz'

d, m = divmod(N - 1, 26)
ans = X[m]
while d > 26:
    d, m = divmod(d - 1, 26)
    ans = X[m] + ans

if d != 0:
    ans = X[d - 1] + ans
print(ans)

Solution (Python):
n=int(input())
b=""

while n>0:
  n-=1
  b+=chr(ord("a")+n%26)
  n=n//26
  
print(b[::-1])

Solution (Python):
roman = "abcdefghijklmnopqrstuvwxyz"
num_to_roman = {}
for i in range(26):
  num_to_roman[i] = roman[i]

n = int(input())
ans = []
while(n):
  n-=1
  ans.insert(0,num_to_roman[n%26])
  n = n//26
  
ans_str = ''.join(ans)
print(ans_str)

Solution (Python):
n = int(input())

A = []

ans = ""
while(n > 0):
    n -= 1
    A.append(n% 26)
    n //= 26
for i in range(len(A)):
    ans += chr(ord('a') + A[len(A)-i-1])
print(ans)

Solution (Python):
n = int(input())

ans=""
amari=[]

while n>=25:
    amari.insert(0,n%26)
    n//=26

amari.insert(0,n)

for i in range(len(amari)-1,0,-1):
    if amari[i]<=0:
        amari[i-1]-=1
        amari[i]+=26

for i in range(len(amari)):
    if amari[i]==1:
        ans+="a"
    elif amari[i]==2:
        ans+="b"
    elif amari[i]==3:
        ans+="c"
    elif amari[i]==4:
        ans+="d"
    elif amari[i]==5:
        ans+="e"
    elif amari[i]==6:
        ans+="f"
    elif amari[i]==7:
        ans+="g"
    elif amari[i]==8:
        ans+="h"
    elif amari[i]==9:
        ans+="i"
    elif amari[i]==10:
        ans+="j"
    elif amari[i]==11:
        ans+="k"
    elif amari[i]==12:
        ans+="l"
    elif amari[i]==13:
        ans+="m"
    elif amari[i]==14:
        ans+="n"
    elif amari[i]==15:
        ans+="o"
    elif amari[i]==16:
        ans+="p"
    elif amari[i]==17:
        ans+="q"
    elif amari[i]==18:
        ans+="r"
    elif amari[i]==19:
        ans+="s"
    elif amari[i]==20:
        ans+="t"
    elif amari[i]==21:
        ans+="u"
    elif amari[i]==22:
        ans+="v"
    elif amari[i]==23:
        ans+="w"
    elif amari[i]==24:
        ans+="x"
    elif amari[i]==25:
        ans+="y"
    elif amari[i]==26:
        ans+="z"

print(ans)