#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define countof(array) (sizeof(array) / sizeof(array[0]))
#define rep(i,n) for(int i = 0; i < (n); ++i)
#define rrep(i,n) for(int i = (n)-1; i >= 0; --i)
#define srep(i,n,s) for(int i = s; i < (n); ++i)
#define rsrep(i,n,s) for(int i = (n)-1; i >= s; --i)
#define all(a) (a).begin(),(a).end()
#define rall(a) (a).rbegin(),(a).rend()
#define aall(a) (a), (a)+countof(a)//for array sorting
#define raall(a) (a), (a)+countof(a), greater<>()
#define show(x) cout<<#x<<" = "<<x<<endl;
#define vfind(v, a) find(all(v), a) != v.end()
#define yn(f) { if (f) puts("YES"); else puts("NO"); }
#define yns(f) { if (f) puts("Yes"); else puts("No"); }
#define show_ary(...) { cout<<#__VA_ARGS__<<" = "; for (const auto& x : (__VA_ARGS__)) { cout<<x<<" "; } cout<<endl; }
#define show_pair(...) cout<<#__VA_ARGS__<<" = "<<endl; for (const auto& x : (__VA_ARGS__)) { cout<<"  "<<x.fi<<" : "<<x.se<<endl; }
#define out_ary(...) { for (const auto& x : (__VA_ARGS__)) { cout<<x<<" "; } cout<<endl; }
#define argmax(v) distance((v).begin(), max_element(all(v)))
#define argmin(v) distance((v).begin(), min_element(all(v)))
#define vmax(v) *max_element(all(v))
#define vmin(v) *min_element(all(v))
typedef long long int ll;
typedef pair<int, int> P;
typedef vector<P> vpair;
typedef vector<int> vint;
typedef vector<ll> vll;
typedef vector<double> vdouble;
typedef vector<string> vstr;
typedef vector<bool> vbool;
typedef vector<vint> vvint;
typedef vector<vll> vvll;
typedef vector<vstr> vvstr;
typedef vector<vbool> vvbool;
const ll LINF = 2000000000000000000ll;
const int INF = 1000000100;
const ll MOD = 1e9+7;

int main() {
    int bit = 32;
    int n;
    cin >> n;
    vll p, m;
    ll tmp = 1;
    vll ls;
    rep(i, bit) {
        ls.push_back(tmp);
        if (tmp > 0) p.push_back(tmp);
        else m.push_back(tmp);
        tmp *= -2;
    }

    vll sp, sm;
    sp.push_back(p[0]);
    sm.push_back(m[0]);
    srep(i, p.size(), 1) sp.push_back(sp[i-1] + p[i]); 
    srep(i, m.size(), 1) sm.push_back(sm[i-1] + m[i]);

    vbool conv(bit, false);
    ll sum = 0;
    if (n > 0) {
        rep(i, bit/2) {
            sum += p[i];
            if (sum >= n) break;
        } 
        rrep(i, bit) {
            if (ls[i] > sum) continue;
            if (ls[i] > 0) {
                if (sum - ls[i] >= n) sum -= ls[i];
                else conv[bit-1-i] = true;
            }
            else {
                if (sum + ls[i] >= n) {
                    sum += ls[i];
                    conv[bit-1-i] = true;
                }
            }
        }
    }
    else if (n < 0) {
        rep(i, bit/2) {
            sum += m[i];
            if (sum <= n) break;
        }
        rrep(i, bit) {
            if (ls[i] < sum) continue;
            if (ls[i] < 0) {
                if (sum - ls[i] <= n) sum -= ls[i];
                else conv[bit-1-i] = true;
            }
            else {
                if (sum + ls[i] <= n) {
                    sum += ls[i];
                    conv[bit-1-i] = true;
                }
            }
        }
    }
    else {
        puts("0");
        return 0;
    }
    string ans = "";
    rep(i, bit) {
        if (ans == "" && conv[i] == false) continue;
        if (conv[i]) ans += "1";
        else ans += "0";
    }
    cout << ans << endl;
    return 0;
}

Measured memory_bytes: 256