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,18): #候補の生成。最長で18ビット。

    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
def solve(n):

    ret=""

    i=0

    while True:

        if i%2==1 and n%2==1: #奇数ビットが1のとき

            n+=2

        ret+=str(n%2)

        n//=2

        if n==0:

            break

        i+=1

    return ret[-1::-1] #逆順に結合されているので反転



n=int(eval(input()))

if n==0:

    print((0))

elif n<0: #負数は左ビットシフトして一文字落とす

    print((solve(n*(-2))[:-1]))

else:

    print((solve(n)))

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, 18):  # 候補の生成。最長で18ビット。
    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

def solve(n):
    ret = ""
    i = 0
    while True:
        if i % 2 == 1 and n % 2 == 1:  # 奇数ビットが1のとき
            n += 2
        ret += str(n % 2)
        n //= 2
        if n == 0:
            break
        i += 1
    return ret[-1::-1]  # 逆順に結合されているので反転


n = int(eval(input()))
if n == 0:
    print((0))
elif n < 0:  # 負数は左ビットシフトして一文字落とす
    print((solve(n * (-2))[:-1]))
else:
    print((solve(n)))

-import bisect +def solve(n): +    ret = "" +    i = 0 +    while True: +        if i % 2 == 1 and n % 2 == 1:  # 奇数ビットが1のとき +            n += 2 +        ret += str(n % 2) +        n //= 2 +        if n == 0: +            break +        i += 1 +    return ret[-1::-1]  # 逆順に結合されているので反転 -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, 18):  # 候補の生成。最長で18ビット。 -    l += [4**i + j for j in l] -if n == 0:  # n==0は出力が空文字になってしまうので別に扱う -    print("0") +if n == 0: +    print((0)) +elif n < 0:  # 負数は左ビットシフトして一文字落とす +    print((solve(n * (-2))[:-1])) -    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 +    print((solve(n)))