Problem:
Score : 400 points

Problem Statement

Given is an integer S.
Find a combination of six integers X_1,Y_1,X_2,Y_2,X_3, and Y_3 that satisfies all of the following conditions:

0 \leq X_1,Y_1,X_2,Y_2,X_3,Y_3 \leq 10^9

The area of the triangle in a two-dimensional plane whose vertices are (X_1,Y_1),(X_2,Y_2), and (X_3,Y_3) is S/2.

We can prove that there always exist six integers that satisfy the conditions under the constraints of this problem.

Constraints

1 \leq S \leq 10^{18}

All values in input are integers.

Input

Input is given from Standard Input in the following format:

S

Output

Print six integers X_1,Y_1,X_2,Y_2,X_3, and Y_3 that satisfy the conditions, in this order, with spaces in between.
If multiple solutions exist, any of them will be accepted.

Sample Input 1

3

Sample Output 1

1 0 2 2 0 1

The area of the triangle in a two-dimensional plane whose vertices are (1,0),(2,2), and (0,1) is 3/2.
Printing 3 0 3 1 0 1 or 1 0 0 1 2 2 will also be accepted.

Sample Input 2

100

Sample Output 2

0 0 10 0 0 10

Sample Input 3

311114770564041497

Sample Output 3

314159265 358979323 846264338 327950288 419716939 937510582

Solution in Java8 (OpenJDK 1.8.0) (judge verdict: Wrong Answer)

import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void debug(String str) {
        boolean debug = false;
        if (debug != false) {
            return;
        }
        System.out.println(str);
    }

    public static void main(String[] args) {

        long S;

        try (Scanner sc = new Scanner(System.in)) {
            S = sc.nextLong();
        }
        long tes = (long) Math.sqrt(S) + 1;
        long X1 = tes;
        long Y1 = 0L;
        long X2 = 0L;
        long Y2 = tes;

        for (long i = 1;; i++) {
            if (S < (X1 - i) * (Y2 + i)) {
                continue;
            } else {
                X1 = X1 + (i-1);
                Y2 = Y2 - (i-1);
                break;
            }
        }

        long target = (X1 * Y2) - S;
        if (target > 1) {
            long test = printPrimeNumbers2((int) target, target);
            Y1 = test;
            X2 = target / test;

        } else if (target == 1) {
            Y1 = 1;
            X2 = 1;
        }

        if (calTri(X1, Y1, X2, Y2) != S) {
            System.out.println("error");
        }
        StringBuilder sb = new StringBuilder();
        sb.append("0 0 ").append(X1).append(" ").append(Y1).append(" ");
        sb.append(X2).append(" ").append(Y2);
        System.out.println(sb.toString());
        return;
    }

    static private long calTri(long x1, long y1, long x2, long y2) {
        long res = (x1 * y2) - (x2 * y1);
        return Math.abs(res);
    }

    static long printPrimeNumbers2(int maxNumber, long target) {

        // ステップ1：「2から上限値までの整数」を探索リストに入れる。
        boolean[] targetNumbers = new boolean[maxNumber + 1];
        Arrays.fill(targetNumbers, true);
        targetNumbers[0] = false;
        targetNumbers[1] = false;

        int sqrt = (int) Math.sqrt(maxNumber);

        // ステップ3：探索リストの先頭の値が、引数の平方根に達するまでふるい落とし操作を続ける。
        for (int i = 2; i <= sqrt; i++) {
            // ステップ2：探索リストの先頭の数を素数とし、その倍数を探索リストから篩い落とす。
            // ※この時、既に篩い落とされた数（false）は除外する。
            int firstNum = i;
            if (targetNumbers[i]) {
                for (int j = i * firstNum; j < targetNumbers.length; j += firstNum) {
                    targetNumbers[j] = false;
                }
            }
        }

        // ステップ4：探索リストに残った値を素数リストに移して処理終了。
        for (int i = 2; i < targetNumbers.length; i++) {
            if (targetNumbers[i]) {
                if (target % i == 0) {
                    return (long) i;
                }
            }
        }

        return -1;
    }
}