import java.io.*;
import java.util.*;

public class TestGen {
	public static void main(String[] args) {
		new TestGen().run();
	}

	BufferedReader br;
	StringTokenizer in;
	PrintWriter out;

	public String nextToken() throws IOException {
		while (in == null || !in.hasMoreTokens()) {
			in = new StringTokenizer(br.readLine());
		}
		return in.nextToken();
	}

	public int nextInt() throws IOException {
		return Integer.parseInt(nextToken());
	}

	public long nextLong() throws IOException {
		return Long.parseLong(nextToken());
	}

	public double nextDouble() throws IOException {
		return Double.parseDouble(nextToken());
	}

	Random rnd;
	int tNumber;

	class Point {
		long x, y;

		Point(long X, long Y) {
			x = X;
			y = Y;
		}
	}

	class Test {
		double R;
		ArrayList<Point> a;

		void printTest() throws IOException {
			if (tNumber < 10)
				out = new PrintWriter("0" + tNumber);
			else
				out = new PrintWriter("" + tNumber);
			tNumber++;
			Collections.shuffle(a, rnd);
			R = 0;
			for (int i = 0; i < 4; i++) {
				if (Math.sqrt(a.get(i).x * a.get(i).x + a.get(i).y * a.get(i).y) > R)
					R = Math.sqrt(a.get(i).x * a.get(i).x + a.get(i).y
							* a.get(i).y);
			}
			out.println((int) Math.floor(R) + 1);
			for (int i = 0; i < 4; i++) {
				out.println(a.get(i).x + " " + a.get(i).y);
			}
			out.close();
		}

		void doRandTest(int maxC) throws IOException {
			a = new ArrayList<Point>();
			for (int i = 0; i < 4; i++) {
				int x = 0;
				int y = 0;
				while ((x == 0) && (y == 0)) {
					x = rnd.nextInt(maxC + 1) - maxC / 2;
					y = rnd.nextInt(maxC + 1) - maxC / 2;
				}
				a.add(new Point(x, y));
			}
			printTest();
		}
		
		void doTest(int maxC) throws IOException {
			a = new ArrayList<Point>();
			for (int i = 0; i < 3; i++) {
				int x = 0;
				int y = 0;
				while ((x == 0) && (y == 0)) {
					x = rnd.nextInt(maxC + 1) - maxC / 2;
					y = rnd.nextInt(maxC + 1) - maxC / 2;
				}
				a.add(new Point(x, y));
			}
			int dd = rnd.nextInt(3) + 2;
			a.add(new Point(a.get(2).x * dd, a.get(2).y * dd));
			printTest();
		}

		void doInterestingTest(int minC, int maxC) throws IOException {
			int t = rnd.nextInt(10000);

			a = new ArrayList<Point>();

			double alpha = t * Math.PI / 2 / 10000;
			
			int[] co = new int[4];
			int z = rnd.nextInt(4);
			for (int i = 0; i < 4; i++) {
				int c = rnd.nextInt(4);
				while ((co[c] > 1) || (c == z))
					c = rnd.nextInt(4);
				
				double r = rnd.nextInt(maxC + 1) + minC;
				
				double ang = alpha + Math.PI / 2 * c;
				long xa = (long)Math.floor(r * Math.cos(ang)) + rnd.nextInt(20) - 10;
				long ya = (long)Math.floor(r * Math.sin(ang)) + rnd.nextInt(20) - 10;
				a.add(new Point(xa, ya));
				co[c]++;
			}
			printTest();
		}
	}

	public void solve() throws IOException {
		tNumber = 2;
		rnd = new Random(31);
		int c = 1;

		Test t = new Test();
		for (int i = 1; i < 10; i++) {
			c *= 10;
			if (c == (int) 1e9)
				c -= c / 10;
			t.doRandTest(c);
		}

		c = 1;
		for (int i = 1; i < 31; i++) {
			if (i % 3 == 1)
				c *= 10;
			if (c == (int) 1e9)
				c -= c / 10;
			t.doInterestingTest(c - c / 3, c / 3);
		}
		
		for (int i = 0; i < 5; i++)
			t.doTest(1000000);

	}

	public void run() {
		try {
			// br = new BufferedReader(new FileReader("TestGen.in"));
			// out = new PrintWriter("TestGen.out");
			// br = new BufferedReader(new InputStreamReader(System.in));
			// out = new PrintWriter(System.out);

			solve();

			out.close();
		} catch (IOException e) {
			e.printStackTrace();
			System.exit(1);
		}
	}
}