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# (Mono 4.6.2.0) (judge verdict: Wrong Answer)

    using System;
    class Program
    {
        static void Main(string[] args)
        {

            // 整数の入力
            string input = Console.ReadLine();
            int N = int.Parse(input);


            // atcoderってこんな数学な感じなんですか・・・
            // なんとなく普通の二進数にしたあと奇数番と偶数番でうなるのがいい気がしてきた
            int[] Splus = new int[34];
            int[] Shonmono = new int[34];

            //// そっかプラスだけじゃないんかぁ
            //int pn = 0;
            //if (N >= 0) {
            //    pn = 1;
            //}
            //else
            //{
            //    pn = 0;
            //    N = -N;
            //}

            //普通に二進数
            for (int i = 0; i < 34; i++)
            {
                if (i % 2 == 0)
                {
                    if (N % 2 != 0)
                    {
                        Shonmono[i] = 1;
                        N = N - 1;
                    }
                }
                else
                {
                    if (N % 2 != 0)
                    {
                        Shonmono[i] = 1;
                        N = N + 1;
                    }
                }
                N = N / 2;
            }

            ////偶数番の2倍の分だけ低くなるのかな？・・・・・・
            //for (int i = 0; i < 16; i++)
            //{
            //    if (Splus[i] == 1)
            //    {
            //        Shonmono[i + 1]++;
            //    }
            //}


            ////めっちゃ考えた末、桁をあげるには上二つを1増やせばいいと思った。
            //for (int i = 0; i < 32; i++)
            //{
            //    if (Shonmono[i] > 1)
            //    {
            //        Shonmono[i + 1] += 1;
            //        Shonmono[i + 2] += 1;
            //        Shonmono[i] -= 2;
            //    }
            //}


            int max = 0;
            for (int i = 33; i > 0; i--)
            {
                if (Shonmono[i] == 0)
                {
                    max = i;
                }
                else { break; }
            }


            String result = "";
            for (int i = 0; i < max; i++)
            {
                result += Shonmono[i];
            }

            //出力
            Console.WriteLine(result);

            //System.Threading.Thread.Sleep(30000);
        }
    }