intsqrt_mod6(int x){ if (x==1) { return1; } if (x==3) { return3; } throw std::exception(); } intdiv2_mod6_first(constint x){ if (x==2) { return1; } if (x==4) { return2; } if (x==0) { return0; } throw std::exception(); } intdiv2_mod6_second(constint x){ if (x==2) { return4; } if (x==4) { return5; } if (x==0) { return6; } throw std::exception(); } intmod6(int a){ int result = a % 6; if (result < 0) { result += 6; } return result; } intk_min(constint x6, constint n){ constint delta=1+8*n; constauto value=(sqrt(delta)-(2*x6+1))/12; returnfloor(value+1); } intverify(int x,int y,int n){ if (1<=y&&y<=x) { return x*(x+1)/2-3*y==n; } returnfalse;
} intmain(){ int n=100; scanf("%d",&n);
int temp=(1+8*mod6(n))%6; int sqrt_root=sqrt_mod6(temp);
int temp2=mod6(-1-sqrt_root); int x6=div2_mod6_first(temp2); int x6_2=div2_mod6_second(temp2);
//printf("%d %d",x1,x2); int k_1=k_min(x6,n);
int x_1=x6+6*k_1; int y_1=(x_1+x_1*x_1-2*n)/6; bool valid=verify(x_1,y_1,n); if (valid) { printf("%d %d",y_1,x_1); }else{ int k_2=k_min(x6_2,n); int x_2=x6_2+6*k_2; int y_2=(x_2+x_2*x_2-2*n)/6; printf("%d %d",y_2,x_2); }