#include using namespace std; #define rep(i, n) for (ll i = 0; i < (ll)(n); i++) #define rep2(i, s, n) for (ll i = (s); i <= (ll)(n); i++) typedef long long ll; typedef vector vi; typedef vector> vvi; typedef vector>> vvvi; typedef vector vs; typedef vector> vvs; typedef vector>> vvvs; typedef vector vc; typedef vector> vvc; typedef vector>> vvvc; typedef vector vll; typedef vector> vvll; typedef vector>> vvvll; typedef vector vd; typedef vector> vvd; typedef vector>> vvvd; #define yes(ans) if(ans)cout << "yes"<< endl; else cout << "no" << endl #define Yes(ans) if(ans)cout << "Yes"<< endl; else cout << "No" << endl #define YES(ans) if(ans)cout << "YES"<< endl ;else cout << "NO" << endl #define all1(x) x.begin(),x.end() #define all2(x) x.rbegin(), x.rend() #define so(x) sort(all1(x)) #define re(x) reverse(all1(x)) #define rso(x) sort(all2(x)) #define vco(x, a) count(all1(x), a) #define per(x) next_permutation(all1(x)) int main(){ ll n; cin >> n; vvll ans(0, vll(3)); ll sum = 0; rep(i, sqrt(n)) rep2(j, i+1, sqrt(n)){ if((n-i*j)%(i+j)==0){ if(j<(n-i*j)/(i+j)){ ans.push_back({i, j, (n-i*j)/(i+j)}); sum += 6; } } } rep2(i, 1, sqrt(n)){ if(n%i==0){ ll m = n/i; if(i%2==m%2){ ans.push_back({i, i, (m-i)/2}); if(i!=(m-i)/2) sum += 3; else sum += 1; } } } cout << sum << endl; rep(i, ans.size()){ so(ans[i]); do{ cout << ans[i][0] << ' ' << ans[i][1] << ' ' << ans[i][2] << endl; }while(per(ans[i])); } }