import java.io.*;/*先找后两个数for(int i = 0; 2 * i * i <= n;i++)for(int j = i; i * i + j * j <= n;j ++)
再找前两个数 for(int i = 0;4 * i * i <= n; i ++)for(int j = i;2 * (j * j + i * i) <= n;j ++)//这样就可以让后两个数尽量大,前两个数尽量小 这样就可以确定后两个数一定大于前两个数//第一次遍历到的值就是字典序列最小的值 //比如找后两个数(1,9)一定比 (5,5) 更早遍历到 这样就保证是字典序列
(用st数组记录某个数是否用过,只需要记录第一次被枚举到的数),*/
public class Main
{static int n;static int N = 5000000;static boolean[] st = new boolean[N];static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));static BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));static PII[] p = new PII[N];//后来存储后两个数对应的下标数对public static void main(String[] args) throws IOException{n = Integer.parseInt(in.readLine());//这里两层循环可以等,是为了让他们更接近nfor(int i = 0; 2 * i * i <= n;i++){for(int j = i; i * i + j * j <= n;j ++){int x = i * i + j * j;if(!st[x]){st[x] = true;p[x] = new PII(i,j);}}}//从小到大枚举,第一次遇到的就是字典序列最小的//这里两次循环最好不要等,这样就可以尽量小for(int i = 0;4 * i * i < n; i ++){for(int j = i;2 * (j * j + i * i) < n;j ++){int t = n - j * j - i * i;if(st[t]){System.out.println(i + " " + j + " " + p[t].x + " " + p[t].y);return;}}}in.close();out.flush();}static class PII{int x,y;public PII(int x,int y){this.x = x;this.y = y;}}
}