848_A. From Y to Y
From beginning till end, this message has been waiting to be conveyed.

For a given unordered multiset of n lowercase English letters ("multi" means that a letter may appear more than once), we treat all letters as strings of length 1, and repeat the following operation n - 1 times:

  * Remove any two elements s and t from the set, and add their concatenation s + t to the set. 



The cost of such operation is defined to be <image>, where f(s, c) denotes the number of times character c appears in string s.

Given a non-negative integer k, construct any valid non-empty set of no more than 100 000 letters, such that the minimum accumulative cost of the whole process is exactly k. It can be shown that a solution always exists.

Input

The first and only line of input contains a non-negative integer k (0 ≤ k ≤ 100 000) — the required minimum cost.

Output

Output a non-empty string of no more than 100 000 lowercase English letters — any multiset satisfying the requirements, concatenated to be a string.

Note that the printed string doesn't need to be the final concatenated string. It only needs to represent an unordered multiset of letters.

Examples

Input

12


Output

abababab


Input

3


Output

codeforces

Note

For the multiset {'a', 'b', 'a', 'b', 'a', 'b', 'a', 'b'}, one of the ways to complete the process is as follows:

  * {"ab", "a", "b", "a", "b", "a", "b"}, with a cost of 0; 
  * {"aba", "b", "a", "b", "a", "b"}, with a cost of 1; 
  * {"abab", "a", "b", "a", "b"}, with a cost of 1; 
  * {"abab", "ab", "a", "b"}, with a cost of 0; 
  * {"abab", "aba", "b"}, with a cost of 1; 
  * {"abab", "abab"}, with a cost of 1; 
  * {"abababab"}, with a cost of 8. 



The total cost is 12, and it can be proved to be the minimum cost of the process.
```python
# def ap(l):
#     d = set()
#     for i in range(1, len(l)):
#         d.add(l[i]-l[i-1])
#     if(len(d) == 1):
#         return d.pop()
#     else:
#         return "re"


# def app(ll, oo, nm, ooo):
#     k = []
#     for j in range(n):
#         if(j%oo !=0):
#             k.append(ll[j])
#     if(ap(k) != "re" and ap(k) != ooo):
#         return True
#     else:
#         return False


# err = 1
# n = int(input())
# l = [int(x) for x in input().split()]
# m = []
# for i in range(2, n):
#     k = []
#     for j in range(0, n, i):
#         k.append(l[j])

#     print(k)
#     m.append(k)
# final = []
# for i in range(n-2):
#     r = 1
#     if(ap(m[i]) != "re"):
#         final.append([ap(m[i]), i+2])

# print(final)

# for i in final:
#     if(app(l, i[1], n, i[0])):
#         print(i)
#         # print("Yes")
#         err = 0
#         break
# if(err):
#     print("No")
# else:
#     print("Yes")
k = int(input())
for i in range(26):
    tt = 1
    while((tt*(tt+1))//2 <=k):
        tt+=1
    k-=((tt*(tt-1))//2)
    
    print(chr(97+i)*(tt), end = "")

print("")
```