unittest
{
/*
	assert( [ "0" ].parse.expand.solve == "4\n3 3 3 3" );
	assert( [ "1" ].parse.expand.solve == "3\n1 0 3" );
	assert( [ "2" ].parse.expand.solve == "2\n2 2" );
	assert( [ "3" ].parse.expand.solve == "7\n27 0 0 0 0 0 0" );
	assert( [ "1234567894848" ].parse.expand.solve == "10\n1000 193 256 777 0 1 1192 1234567891011 48 425" );
*/
}



import std.conv;
import std.format;
import std.range;
import std.stdio;
import std.typecons;

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

auto parse( Range )( Range input )
if( isInputRange!Range && is( ElementType!Range == string ) )
{
	auto k = input.front.to!( long );
	return tuple( k );
}

auto solve( long k )
{
	const N = 50;
	
	if( k == 0 ) return "2\n0 0";
	if( k == 1 ) return "2\n0 2";
	
	long[] anss;
	if( k < N )
	{
		anss = new long[ k ];
		foreach( i, ref ans; anss )
		{
			ans = k - i;
		}
	}
	else
	{
		auto b = k / N;
		auto r = k % N;
		anss = new long[ N ];
		foreach( i, ref ans; anss )
		{
			ans = N + b - i - ( r <= i );
		}
	}
	return format( "%s\n%s", anss.length, anss.to!( string[] ).join( " " ) );
}
