Problem:
Score : 300 points

Problem Statement

Given an integer N, find the base -2 representation of N.

Here, S is the base -2 representation of N when the following are all satisfied:

S is a string consisting of 0 and 1.

Unless S = 0, the initial character of S is 1.

Let S = S_k S_{k-1} ... S_0, then S_0 \times (-2)^0 + S_1 \times (-2)^1 + ... + S_k \times (-2)^k = N.

It can be proved that, for any integer M, the base -2 representation of M is uniquely determined.

Constraints

Every value in input is integer.

-10^9 \leq N \leq 10^9

Input

Input is given from Standard Input in the following format:

N

Output

Print the base -2 representation of N.

Sample Input 1

-9

Sample Output 1

1011

As (-2)^0 + (-2)^1 + (-2)^3 = 1 + (-2) + (-8) = -9, 1011 is the base -2 representation of -9.

Sample Input 2

123456789

Sample Output 2

11000101011001101110100010101

Sample Input 3

0

Sample Output 3

0

Solution in C++14 (GCC 5.4.1) (judge verdict: Accepted)

#include <bits/stdc++.h>
#define int long long
using namespace std;

int n;

signed main() {
    ios::sync_with_stdio(0); cin.tie(0);
    cin >> n;
    int y_odd = 0;
    bool flag = false;
    if(n < 0) flag = true, n = -n;
    for(int i = 0; i < 35; ++i) {
        if((i & 1LL) && !flag) {
            if((1LL << i) & n) {
                y_odd |= (1LL << i);
                n += (1LL << i);
            }
        } else if(!(i & 1LL) && flag) {
            if((1LL << i) & n) {
                y_odd |= (1LL << i);
                n += (1LL << i);
            }
        }
    }
    int ans = n | y_odd;
    auto hp = [](int j)->int {
        int ret = 1;
        for(int msk = 1; msk <= (1LL << 50); msk <<= 1) {
            if(msk & j) ret = msk;
        }
        return ret;
    };
    for(int i = hp(ans); i >= 1LL; i >>= 1LL) {
        cout << ((i & ans) ? 1 : 0);
    }
    cout << endl;

}