#include using namespace std; typedef long long ll; typedef pair P; #define REP(i,n) for(ll i=0;i div(ll n){ vector

d; for(ll i=1;i*i<=n;i++){ if(n%i==0 && i<=n/i){ if((n/i-i)%2==0) d.push_back(P(i,n/i)); } } return d; } bool is_sqr(ll N) { ll r = (ll)floor(sqrt((double)N)); return r*r==N; } int main(void){ cin.tie(nullptr); ios_base::sync_with_stdio(false); ll i,j; ll N; cin >> N; vector

v=div(4*N); ll m=v.size(); vector

a; vector

u; REP(i,m){ ll p=(v[i].second+v[i].first)/2; ll q=(v[i].second-v[i].first)/2; u.push_back(P(p,q)); } REP(i,u.size()){ ll R=u[i].first; ll L=u[i].second; if(is_sqr(1+4*R) && is_sqr(1+4*L)){ ll x,y,xx; if((-1+(ll)sqrt(1+4.0*R))%2==0 && (1+(ll)sqrt(1+4.0*L))%2==0){ x=(1+(ll)sqrt(1+4.0*L))/2; y=(-1+(ll)sqrt(1+4.0*R))/2; if(y>=x && x!=0) a.push_back(P(x,y)); } if((1-(ll)sqrt(1+4.0*R))%2==0){ if(1-(ll)sqrt(1+4.0*L)>=0){ xx=(1-(ll)sqrt(1+4.0*L))/2; if(y>=xx && xx!=0) a.push_back(P(xx,y)); } } } } cout << a.size() << endl; REP(i,a.size()){ cout << a[i].first << ' ' << a[i].second << endl; } return 0; }