/******************************************************************************
 * FILENAME : triangle.c
 * AUTHOR   : Y.Kinoshita
 * CREATE   : 2019-08-02
 ******************************************************************************/
/****************/
/* インクルード */
/****************/
#include <stdio.h>
#include <math.h>

/********/
/* 定数 */
/********/
#define WIN
#define BOUNDARY_LENGTH (1000000000LL) /* 3角形を取り囲む正方形の辺の長さ     */

/****************/
/* プロトタイプ */
/****************/
void solve(long long s);

/******************************************************************************
 * メイン
 ******************************************************************************/
int main(void)
{
    long long size = 0;                /* 3角形の面積(の2倍)                  */

    /**************************************************************************/
    /* 入力された値を面積に持つ3角形の頂点の座標を提示する動作を繰り返す      */
    /**************************************************************************/
    while (1 == scanf(" %lld", &size))
    {
        solve(size);
    }
    return 0;
}

/******************************************************************************
 * 解答処理(名称とインタフェースは許して。解ければよかろうなのだ。) 
 ******************************************************************************/
void solve(
    long long size                     /* 3角形の面積(の2倍)                  */
)
{
    /**************************************************************************/
    /* 解答方針                                                               */
    /*   平行移動、回転、対称移動をしても3角形の面積は変わらないので、        */
    /*   頂点の1つを原点に固定しても構わない。                                */
    /*   (1番長い辺が正方形をはみ出ないようにできることも直感的には自明。     */
    /*    証明は学のある若者に任せる。)                                       */
    /**************************************************************************/
    /*   で、他の2頂点を、頂点1:(x1, y1) 頂点2:(x2, y2)と置くと、3角形の面積は*/
    /*   外積(の絶対値)と同じなので、                                         */
    /*     1/2(x1 * y2 - x2 * y1) になるはず。                                */
    /**************************************************************************/
    /*   なので結局、入力として与えられる3角形の面積(の2倍)をSとしたとき      */
    /*     x1 * y2 - x2 * y1 = S                                              */
    /*   を満たすx1, y1, x2, y2を求めれば良い。                               */
    /**************************************************************************/
    long long x1 = 0LL;                /* 3角形の頂点1のx座標                 */
    long long y1 = 0LL;                /* 3角形の頂点1のy座標                 */
    long long x2 = 0LL;                /* 3角形の頂点2のx座標                 */
    long long y2 = 0LL;                /* 3角形の頂点2のy座標                 */

    /**************************************************************************/
    /* 解答方針(続き - 頂点の選び方)                                          */
    /*   頂点を例えば(S, 0),(0, 1)と選べば面積の条件はクリアするけど、        */
    /*   Sの値によっては境界をはみ出てしまう。                                */
    /*   それでは、(a - 1)^2 < S <= a^2 (#1:意図は後述)を満たすaを求めて、    */
    /*   (a, 1), (b, a)のタイプの頂点を求める戦法でどうだ?                    */
    /**************************************************************************/
    /*   a = sqrt(S) + 1で良いし、                                            */
    /*   面積(の2倍)がa * a - 1 * bなので、                                   */
    /*   b = a * a - S                                                        */
    /*   (#1)でSの範囲を絞っているので、bは最大でもa^2 - (a - 1)^2            */
    /*   = 2 * a - 1                                                          */
    /*   もし境界をはみ出したらx1を1減らせばx1 * x2 < a - 1なので行けそう。   */
    /*   (これ、プログラミングの問題なのか?)                                  */
    /**************************************************************************/
    long long diagProd = 0;            /* x1 * y2の部分                       */
    x1 = (long long)sqrt(size);        /* 入力Sの平方根の整数部を取得         */
    if (x1 * x1 < size)                /* Sがジャスト平方数の場合以外は+1     */
    {
        ++x1;
    }
    y2 = x1;
    diagProd = x1 * y2;
    /**************************************************************************/
    /* x1 * y2が大き過ぎる場合、x1を減らして調整                              */
    /**************************************************************************/
    if (diagProd > (size + BOUNDARY_LENGTH))
    {
        --x1;
        diagProd -= y2;
    }
    /**************************************************************************/
    /* x2,y1で最終的に面積の帳尻を合わせて完了                                */
    /**************************************************************************/
    x2 = 1;
    y1 = diagProd - size;
    /**************************************************************************/
    /* 結果出力                                                               */
    /**************************************************************************/
    printf("0 0 %lld %lld %lld %lld\n", x1, y1, x2,y2); 
    return;
}


Measured memory_bytes: 128