import std.stdio;
import std.conv, std.array, std.algorithm, std.string;
import std.math, std.random, std.range, std.datetime;
import std.bigint;
import std.container;
string read(){ static string[] ss; while(!ss.length) ss = readln.chomp.split; string res = ss[0]; ss.popFront; return res; }

// when small

// [t, t] -> (t - 1) * 2
// [t + 2, t - 1] -> t * 2 - 1

// (k: odd)  t = (k + 1) / 2, n = 2, as = [t + 2, t - 1]
// (k: even) t = k / 2 + 1, n = 2, as = [t, t]


// when larger

// [t, t, ..., t] (50) -> (t - 49) * 50
// [t + a, t + a, ..., t + a] (b) ~ [t - b, t - b, ..., t - b] (50 - b) -> (t - 49) * 50 + b
// where a = 50 - (b - 1)

// k = 50 * m + r
// m = t - 49, r = b
// t = m + 49, a = 49 - r, b = r

void main(){
	long k = read.to!long;
	
	long n;
	long[] as;
	
	if(k < 100000){
		
		n = 2;
		if(k % 2) as = [(k + 1) / 2 + 2, (k + 1) / 2 - 1];
		else as = [k / 2 + 1, k / 2 + 1];
		
		}
	else{
		
		n = 50;
		long m = k / 50, r = k % 50;
		long t = m + 49, a = 49 - r, b = r;
		foreach(i; 0 .. b) as ~= t + a;
		foreach(i; 0 .. 50 - b) as ~= t - b;
		
		}
		
	n.writeln;
	as.map!(to!string).join(" ").writeln;
	}

