import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.StringTokenizer;

/**
 * @author Dmitry Abdrashitov
 */
public class fun2_da implements Runnable {
	
	private PrintWriter out;
	private BufferedReader in;
	private StringTokenizer st;
	
	private void solve() throws Exception {
		int n = nextInt();
		if (n < 2 || n > 50) {
			throw new Exception("Wrong input data.");
		}
		int[] x = new int[n];
		int[] y = new int[n];
		for (int i = 0; i < n; i++) {
			x[i] = nextInt();
			y[i] = nextInt();
			if (Math.abs(x[i]) > 10000 || Math.abs(y[i]) > 10000) {
				throw new Exception("Wrong input data.");
			}
		}
		long[] b = new long[n * n];
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < n; j++) {
				b[i * n + j] = 1L * (x[i] - x[j]) * (x[i] - x[j]) + 1L * (y[i] - y[j]) * (y[i] - y[j]);
			}
		}
		Arrays.sort(b);
		int c = 0;
		for (int i = 0; i < n * n; i++) {
			if (b[i] > 0 && b[i] != b[i - 1]) {
				b[c++] = b[i];
			}
		}
		out.println(c);
		for (int i = 0; i < c; i++) {
			out.println(Math.sqrt(b[i]));
		}
	}
	
	public void run() {
		try {
			solve();
		} catch (Exception e) {
			apstenu(e);
		} finally {
			out.close();
		}
	}
	
	private void apstenu(Exception e) {
		e.printStackTrace();
		System.exit(239);
	}
	
	private int nextInt() throws Exception {
		return Integer.parseInt(nextToken());
	}
	
	private String nextToken() throws Exception {
		while (!st.hasMoreTokens()) {
			String line = in.readLine();
			st = new StringTokenizer(line);
		}
		return st.nextToken();
	}
	
	private fun2_da(String name) {
		try {
			out = new PrintWriter(new FileWriter(name + ".out"));
			in = new BufferedReader(new FileReader(name + ".in"));
			st = new StringTokenizer("");
		} catch (Exception e) {
			apstenu(e);
		}
	}

	public static void main(String[] args) {
		new Thread(new fun2_da("fun2")).start();
	}
}
