#include<iostream>
#include<vector>
#include<algorithm>
#include<cassert>
#include<tuple>
using namespace std;
vector<tuple<int,int,int> >xyz;
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	int N;cin>>N;
	{//y=0 or z=0
		for(int a=1;a<=N;a++)if(N%a==0)
		{
			xyz.push_back(make_tuple(a,N/a,0));
			xyz.push_back(make_tuple(a,0,N/a));
		}
	}
	for(int y=1;y<=N;y++)for(int z=1;y*z<=N;z++)
	{
		int rest=N-y*z;
		if(rest%(y+z)==0)
		{
			xyz.push_back(make_tuple(rest/(y+z),y,z));
		}
	}
	cout<<xyz.size()<<"\n";
	for(auto[x,y,z]:xyz)cout<<x<<" "<<y<<" "<<z<<"\n";
}