Problem: The statement of this problem is the same as the statement of problem C2. The only difference is that, in problem C1, n is always even, and in C2, n is always odd.

You are given a regular polygon with 2 ⋅ n vertices (it's convex and has equal sides and equal angles) and all its sides have length 1. Let's name it as 2n-gon.

Your task is to find the square of the minimum size such that you can embed 2n-gon in the square. Embedding 2n-gon in the square means that you need to place 2n-gon in the square in such way that each point which lies inside or on a border of 2n-gon should also lie inside or on a border of the square.

You can rotate 2n-gon and/or the square.

Input

The first line contains a single integer T (1 ≤ T ≤ 200) — the number of test cases.

Next T lines contain descriptions of test cases — one per line. Each line contains single even integer n (2 ≤ n ≤ 200). Don't forget you need to embed 2n-gon, not an n-gon.

Output

Print T real numbers — one per test case. For each test case, print the minimum length of a side of the square 2n-gon can be embedded in. Your answer will be considered correct if its absolute or relative error doesn't exceed 10^{-6}.

Example

Input


3
2
4
200


Output


1.000000000
2.414213562
127.321336469

Solution (in JAVA):

Solution:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public final class Main
{
	static long mod = 998244353l;
	static Map<Long, Long> invk = new HashMap<>();
	static int f[];
	static int fmin = 0;

	public static void main(String[] args) throws IOException
	{
		Scanner in = getScan(args);

		int tt = in.nextInt();
		while (tt-- > 0)
		{
			int n = in.nextInt();

			double res = 1 / Math.tan(Math.PI / (2 * n));
			System.out.println(res);
		}
	}

	public static long binpow(long x, long y)
	{
		long z = 1;
		while (y > 0)
		{
			if (y % 2 == 1)
			{
				z *= x;
				y--;
			}
			else
			{
				x = (x * x);
				y = y >> 1;
			}
		}
		return z;
	}

	public static long gcd(long a, long b, Pair p)
	{
		long x = 1, y = 0, x1 = 0, y1 = 1, a1 = a, b1 = b;

		while (b1 > 0)
		{
			long q = a1 / b1;
			long tmp = x - q * x1;
			x = x1;
			x1 = tmp;
			tmp = y - q * y1;
			y = y1;
			y1 = tmp;
			tmp = a1 - q * b1;
			a1 = b1;
			b1 = tmp;
		}
		p.first = x;
		p.second = y;
		return a1;
	}

	public static class Pair
	{
		public long first;
		public long second;
	}

	public static long gcd(long a, long b)
	{
		if (a == 0 || b == 0)
		{
			return a | b;
		}
		int shift = Long.numberOfTrailingZeros(a | b);
		a = a >> Long.numberOfTrailingZeros(a);
		while (b > 0)
		{
			b = b >> Long.numberOfTrailingZeros(b);
			if (a > b)
			{
				long tmp = a;
				a = b;
				b = tmp;
			}
			b -= a;
		}
		return a << shift;
	}

	public static int find(Subset[] subset, int i)
	{
		if (subset[i].parent != i)
		{
			subset[i].parent = find(subset, subset[i].parent);
		}
		return subset[i].parent;
	}

	public static void union(Subset[] subset, int x, int y)
	{
		int rootx = find(subset, x);
		int rooty = find(subset, y);
		if (subset[rootx].rank < subset[rooty].rank)
		{
			subset[rootx].parent = rooty;
		}
		else if (subset[rootx].rank > subset[rooty].rank)
		{
			subset[rooty].parent = rootx;
		}
		else
		{
			subset[rootx].parent = rooty;
			subset[rooty].rank++;
		}
	}

	static class Subset
	{
		int parent;
		int rank;
	}

	public static long fact(int n)
	{
		if (n <= fmin)
		{
			return f[n];
		}
		long res = f[fmin];
		for (int i = fmin + 1; i <= n; i++)
		{
			res = (res * i) % mod;
			f[i] = (int) res;
		}
		fmin = n;
		return res;
	}

	public static int log2nlz(int bits)
	{
		if (bits == 0) return 0; // or throw exception
		return 31 - Integer.numberOfLeadingZeros(bits);
	}

	static Scanner getScan(String[] args) throws IOException
	{
		if (args.length == 0)
		{
			return new Scanner(System.in);
		}
		else
		{
			return new Scanner(new File(args[0]));
		}
	}

	static BufferedReader getBuffer(String[] args) throws IOException
	{
		if (args.length == 0)
		{
			return new BufferedReader(new InputStreamReader(System.in));
		}
		else
		{
			return new BufferedReader(new FileReader(args[0]));
		}
	}

	public static long binpowMod(long x, long y, long mod)
	{
		long z = 1;
		x = x % mod;
		while (y > 0)
		{
			if (y % 2 == 1)
			{
				z = (z * x) % mod;
				y--;
			}
			else
			{
				x = (x * x) % mod;
				y = y >> 1;
			}
		}
		return z;
	}

	public static long invMod(long x, long mod)
	{
		if (!invk.containsKey(x))
		{
			invk.put(x, binpowMod(x, mod - 2, mod));
		}
		return invk.get(x);
	}

	public static long divMod(long x, long y, long mod)
	{
		x = x % mod;
		y = y % mod;
		return (x * invMod(y, mod)) % mod;
	}
}