#include using namespace std; using ll = long long; const ll linf=(1LL<<60) - 1; const int inf=(1LL<<30) - 1; const int mod=1000000007; const int MOD=998244353; const ll dx[] = {1, 0, -1, 0, 1, 1, -1, -1}; const ll dy[] = {0, 1, 0, -1, 1, -1, 1, -1}; #define overload4(a,b,c,d,name,...) name #define rep1(n) for(long long _=0;_ name(__VA_ARGS__) #define vv(type,name,h,...) vector name(h,vector(__VA_ARGS__)) #define vvv(type,name,h,w,...) vector name(h,vector(w,vector(__VA_ARGS__))) #define vvvv(type, name, h, w, n, ...) vector>>> name(h, vector>>(w, vector>(n, vector(__VA_ARGS__)))) struct Setting{ Setting(){ cin.tie(nullptr)->sync_with_stdio(0); fixed(cout).precision(12); } }Setting; // #define _GLIBCXX_DEBUG //----------------------------------- // return floor(sqrt(N)) long long isqrt(long long N) { long long x = N, y = (N + 1) / 2; while(y < x) { x = y; y = (y + N / y) / 2; } return x; } void solve() { ll S; cin >> S; vector ans; while(S) { ll t = isqrt(S); ans.push_back(t * t); S -= t * t; } cout << ans.size() << endl; for(auto& x: ans) { cout << x << " "; } cout << endl; } int main() { int T = 1; // cin >> T; while(T--) { solve(); }; }