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.range;
import std.stdio;
import std.string;
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 )
{
	if( k == 0 ) return "2\n0 0";
	
	auto n = 50L;
	while( k % n != 0 ) n--;
	
	if( 2 <= n )
	{
		auto anss = new long[ n ];
		foreach( i, ref ans ; anss )
		{
			ans = n - i + ( k - 1 ) / n;
		}
		return format( "%s\n%s", n, anss.to!( string[] ).join( " " ) );
	}
	else
	{
		n = 2;
		auto anss = new long[ n ];
		anss[ 0 ] = n + ( k - 1 ) / n;
		anss[ 1 ] = n + ( k - 1 ) / n - n;
		return format( "%s\n%s", n, anss.to!( string[] ).join( " " ) );
	}
}
