first(n) = {
	my(i);
	res = vector(n); 
	maxn = n; 
	inc = 5*10^6; 
	printat = inc; 
	qchecks = 0; 
	for(i = 1, n, 
		process(i, i)
	); 
	concat(1, res)
}

process(sumsofar, lastTerm) = {
	qchecks++; 
	if(qchecks > printat, 
		print(printat \ inc" "res);
		printat+=inc;
	); 
	my(i); 
	res[sumsofar]++; 
	for(i = 2*lastTerm + 1, maxn - sumsofar, 
		process(sumsofar+i, i); 
	);
	if(!bitand(lastTerm, 1) && sumsofar + lastTerm>>1 <= maxn,
		process(sumsofar+lastTerm>>1, lastTerm>>1)
	)
	
}