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# (.NET Core 3.1.201) (judge verdict: Accepted)

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using static System.Console;

class Program
{
    static void Main(string[] args)
    {
        var N = long.Parse(ReadLine());

        static long GetPow(int n) => (n == 0) ? 1 : -2 * GetPow(n - 1);
        var pow = Enumerable.Range(0, 40).Select(i => GetPow(i)).ToArray();

        long GetValue(bool[] bits) => bits.Select((v, i) => v ? pow[i] : 0).Sum();
        var bits = new bool[pow.Length];

        if (0 < N)
        {
            bits = pow.Select(v => 0 < v).ToArray();
            foreach (var (v, i) in pow.Select((v, i) => (v, i)).Reverse())
            {
                var isM = (v < 0);
                var value = GetValue(bits);
                if (value == N)
                    break;
                else if(value - (isM ? -v : v) >= N)
                    bits[i] = isM;
            }
        }
        else if(0 > N)
        {
            bits = pow.Select(v => 0 > v).ToArray();
            foreach (var (v, i) in pow.Select((v, i) => (v, i)).Reverse())
            {
                var isP = (v > 0);
                var value = GetValue(bits);
                if (value == N)
                    break;
                else if (value - (isP ? -v : v) <= N)
                    bits[i] = isP;
            }
        }

        var ans = new string(bits.Reverse().Select(x => x ? '1' : '0').ToArray());
        ans = ans.TrimStart('0');
        ans = ans == "" ? "0" : ans;
        WriteLine(ans);
    }
}

static class ArrayDeconstructExtensions
{
    public static void Deconstruct<T>(this T[] a, out T i1, out T i2) => (i1, i2) = (a[0], a[1]);
    public static void Deconstruct<T>(this T[] a, out T i1, out T i2, out T i3) => (i1, i2, i3) = (a[0], a[1], a[2]);
    public static void Deconstruct<T>(this T[] a, out T i1, out T i2, out T i3, out T i4) => (i1, i2, i3, i4) = (a[0], a[1], a[2], a[3]);
    public static void Deconstruct<T>(this T[] a, out T i1, out T i2, out T i3, out T i4, out T i5) => (i1, i2, i3, i4, i5) = (a[0], a[1], a[2], a[3], a[4]);
}