## https://yukicoder.me/problems/no/294 def combination(k, n): ans = 1 for j in range(n): ans *= (k - j) ans //= (j + 1) return ans def main(): N = int(input()) cache = {} def combination(k, n): if (k, n) in cache: return cache[(k, n)] if k == n or n == 0: ans = 1 else: ans = combination(k - 1, n) + combination(k - 1, n - 1) cache[(k, n)] = ans return ans def calc(k): answer = 0 n = 3 while n <= k: answer += combination(k - 1, n - 1) n += 3 return answer total_num = 0 k = 1 while N > total_num + calc(k): total_num += calc(k) k += 1 N -= total_num def dfs(array, k, five_num, N_map): if len(array) == k - 1: if (five_num + 1) % 3 == 0: N_map[0] -= 1 if N_map[0] == 0: array.append("5") return True return False array.append("3") if dfs(array, k, five_num, N_map): return True array[-1] = "5" if dfs(array, k, five_num + 1, N_map): return True array.pop() return False array = [] dfs(array, k, 0, [N]) print("".join(array)) if __name__ == "__main__": main()