unittest
{
	assert( [ "-9" ].solve == "1011" );
	assert( [ "123456789" ].solve == "11000101011001101110100010101" );
	assert( [ "0" ].solve == "0" );
}



import std.conv;
import std.range;
import std.stdio;

void main()
{
	stdin.byLineCopy.solve.writeln;
}

auto solve( Range )( Range input )
if( isInputRange!Range && is( ElementType!Range == string ) )
{
	auto n = input.front.to!( long );
	
	if( n == 0 ) return "0";
	
	// -2進数表記での桁数と、この桁数で表せる範囲を計算
	auto d = 0L;
	auto ps = [ 0L ];
	auto ms = [ 0L ];
	for( ; n < ms.back || ps.back < n; d++ )
	{
		auto s = ( -2L ) ^^ d;
		ps ~= ps.back;
		ms ~= ms.back;
		if( 0 < s ) ps.back += s;
		else        ms.back += s;
	}
	
	// 上の桁から順番に変換
	auto anss = new byte[ d ];
	foreach( i, ref ans; anss )
	{
		auto j = d - i.signed - 1;
		auto s = ( -2L ) ^^ j;
		
		// 一桁少ないときに表現できるなら0、できないなら1
		if( 0 < s )
		{
			if( ps[ j ] < n )
			{
				n -= s;
				ans = 1;
			}
		}
		else
		{
			if( n < ms[ j ] )
			{
				n -= s;
				ans = 1;
			}
		}
	}
	return anss.to!( string[] ).join();
}
