import bisect

def put(a,b): #結果の表示

    l=max(len(a),len(b)) #aとbの長さが違うときに壊れるので以下で十分な長さの0を結合しておく

    a="0"*l+a

    b="0"*l+b

    s=""

    for i in range(-1,-l-1,-1): #長さの偶奇を考えたくないので逆順に生成してあとで反転

        s+=a[i]+b[i]

    s=s[-1::-1] #反転

    ind=s.find("1")

    print((s[ind:])) #頭にたくさんついている0を除いて表示



def quad(i): #数値を4進数表記の文字列に直す。16→"100"など。

    s=""

    while i>0:

        s+=str(i%4)

        i//=4

    return s[-1::-1]



l=[0,1]

for i in range(1,20): #候補の生成。最長で20ビット。

    l+=[4**i+j for j in l]



n=int(eval(input()))

if n==0: #n==0は出力が空文字になってしまうので別に扱う

    print("0")

else:

    for i in range(len(l)):

        ind=bisect.bisect_left(l,(l[i]-n)//2)

        if l[i]-2*l[ind]==n:

            put(quad(l[i]),quad(l[ind]))

            break
import bisect





def put(a, b):  # 結果の表示

    l = max(len(a), len(b))  # aとbの長さが違うときに壊れるので以下で十分な長さの0を結合しておく

    a = "0" * l + a

    b = "0" * l + b

    s = ""

    for i in range(-1, -l-1, -1):  # 長さの偶奇を考えたくないので逆順に生成してあとで反転

        s += a[i] + b[i]

    s = s[-1::-1]  # 反転

    print((s[s.find("1"):]))  # 頭にたくさんついている0を除いて表示





def quad(i):  # 数値を4進数表記の文字列に直す。16→"100"など。

    s = ""

    while i > 0:

        s += str(i % 4)

        i //= 4

    return s[-1::-1]





l = [0, 1]

for i in range(1, 20):  # 候補の生成。最長で20ビット。

    l += [4 ** i + j for j in l]



n = int(eval(input()))

if n == 0:  # n==0は出力が空文字になってしまうので別に扱う

    print("0")

else:

    for i in range(len(l)):

        ind = bisect.bisect_left(l, (l[i] - n) // 2)

        if l[i] - 2 * l[ind] == n:

            put(quad(l[i]), quad(l[ind]))

            break
import bisect


def put(a, b):  # 結果の表示
    l = max(len(a), len(b))  # aとbの長さが違うときに壊れるので以下で十分な長さの0を結合しておく
    a = "0" * l + a
    b = "0" * l + b
    s = ""
    for i in range(-1, -l - 1, -1):  # 長さの偶奇を考えたくないので逆順に生成してあとで反転
        s += a[i] + b[i]
    s = s[-1::-1]  # 反転
    ind = s.find("1")
    print((s[ind:]))  # 頭にたくさんついている0を除いて表示


def quad(i):  # 数値を4進数表記の文字列に直す。16→"100"など。
    s = ""
    while i > 0:
        s += str(i % 4)
        i //= 4
    return s[-1::-1]


l = [0, 1]
for i in range(1, 20):  # 候補の生成。最長で20ビット。
    l += [4**i + j for j in l]
n = int(eval(input()))
if n == 0:  # n==0は出力が空文字になってしまうので別に扱う
    print("0")
else:
    for i in range(len(l)):
        ind = bisect.bisect_left(l, (l[i] - n) // 2)
        if l[i] - 2 * l[ind] == n:
            put(quad(l[i]), quad(l[ind]))
            break

import bisect


def put(a, b):  # 結果の表示
    l = max(len(a), len(b))  # aとbの長さが違うときに壊れるので以下で十分な長さの0を結合しておく
    a = "0" * l + a
    b = "0" * l + b
    s = ""
    for i in range(-1, -l - 1, -1):  # 長さの偶奇を考えたくないので逆順に生成してあとで反転
        s += a[i] + b[i]
    s = s[-1::-1]  # 反転
    print((s[s.find("1") :]))  # 頭にたくさんついている0を除いて表示


def quad(i):  # 数値を4進数表記の文字列に直す。16→"100"など。
    s = ""
    while i > 0:
        s += str(i % 4)
        i //= 4
    return s[-1::-1]


l = [0, 1]
for i in range(1, 20):  # 候補の生成。最長で20ビット。
    l += [4**i + j for j in l]
n = int(eval(input()))
if n == 0:  # n==0は出力が空文字になってしまうので別に扱う
    print("0")
else:
    for i in range(len(l)):
        ind = bisect.bisect_left(l, (l[i] - n) // 2)
        if l[i] - 2 * l[ind] == n:
            put(quad(l[i]), quad(l[ind]))
            break

-    ind = s.find("1") -    print((s[ind:]))  # 頭にたくさんついている0を除いて表示 +    print((s[s.find("1") :]))  # 頭にたくさんついている0を除いて表示