n = int(input()) # DPテーブルの初期化 max_n = n INF = float('inf') dp = [INF] * (max_n + 1) dp[0] = 0 prev = [0] * (max_n + 1) # 各iに対して、どのjを選んだかを記録 for i in range(1, max_n + 1): j = 1 while j * j <= i: if dp[i - j*j] + j < dp[i]: dp[i] = dp[i - j*j] + j prev[i] = j j += 1 # 復元 current = n parts = [] while current > 0: j = prev[current] parts.append(j) current -= j * j parts.sort() # 昇順にソート # バイナリの構築 binary = [] current_char = '0' for part in parts: s = [] # 現在のcurrent_charから始まる長さpartの01列を生成 for i in range(part): s.append(current_char) current_char = '1' if current_char == '0' else '0' binary.append(''.join(s)) # 最後の文字を次の部分の先頭文字に合わせる # partが偶数なら最後の文字は元のcurrent_charと逆 # partが奇数なら最後の文字は元のcurrent_charと同じ # ループ内でcurrent_charは切り替わっているので、最後の文字はs[-1] current_char = s[-1] print(''.join(binary))