Try guessing the statement from this picture: 

<image>

You are given a non-negative integer d. You have to find two non-negative real numbers a and b such that a + b = d and a ⋅ b = d.

Input

The first line contains t (1 ≤ t ≤ 10^3) — the number of test cases.

Each test case contains one integer d (0 ≤ d ≤ 10^3).

Output

For each test print one line.

If there is an answer for the i-th test, print "Y", and then the numbers a and b.

If there is no answer for the i-th test, print "N".

Your answer will be considered correct if |(a + b) - a ⋅ b| ≤ 10^{-6} and |(a + b) - d| ≤ 10^{-6}.

Example

Input


7
69
0
1
4
5
999
1000


Output


Y 67.985071301 1.014928699
Y 0.000000000 0.000000000
N
Y 2.000000000 2.000000000
Y 3.618033989 1.381966011
Y 997.998996990 1.001003010
Y 998.998997995 1.001002005
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;

import java.util.*;


public class Soly
{


static  long lower(long sum,long k){
    long s=0,e=(long)(10e18),mid=0,ans=-1;
    while (s<=e){
        mid=(e+s)>>1;
        if (sum<=(k/mid)){
            ans=mid;
            s=mid+1;
        }else e=mid-1;
    }
    return ans;
}
    public static void main(String[] args) throws IOException {
        Scanner in = new Scanner(System.in);
        try (PrintWriter or = new PrintWriter(System.out)) {

            int t=in.nextInt();
            while (t-->0){
                int d=in.nextInt();
                long h=d*d-4*d;
                if (h<0){
                    or.println("N");
                    continue;
                }
                double ans1= (d+(Math.sqrt(h)))/2.0;

                double ans2=(d-(Math.sqrt(h)))/2.0;
                or.println("Y "+ans1+" "+ans2);

            }
        }
    }
    static class Scanner {

                StringTokenizer st;
                BufferedReader br;

                public Scanner(InputStream s) {
                    br = new BufferedReader(new InputStreamReader(s));
                }

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

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

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

                public String nextLine() throws IOException {
                    return br.readLine();
                }

                public double nextDouble() throws IOException {
                    String x = next();
                    StringBuilder sb = new StringBuilder("0");
                    double res = 0, f = 1;
                    boolean dec = false, neg = false;
                    int start = 0;
                    if (x.charAt(0) == '-') {
                        neg = true;
                        start++;
                    }
                    for (int i = start; i < x.length(); i++) {
                        if (x.charAt(i) == '.') {
                            res = Long.parseLong(sb.toString());
                            sb = new StringBuilder("0");
                            dec = true;
                        } else {
                            sb.append(x.charAt(i));
                            if (dec) {
                                f *= 10;
                            }
                        }
                    }
                    res += Long.parseLong(sb.toString()) / f;
                    return res * (neg ? -1 : 1);
                }

                public boolean ready() throws IOException {
                    return br.ready();
                }

            }



}