Problem: You are given three positive (i.e. strictly greater than zero) integers x, y and z.

Your task is to find positive integers a, b and c such that x = max(a, b), y = max(a, c) and z = max(b, c), or determine that it is impossible to find such a, b and c.

You have to answer t independent test cases. Print required a, b and c in any (arbitrary) order.

Input

The first line of the input contains one integer t (1 ≤ t ≤ 2 ⋅ 10^4) — the number of test cases. Then t test cases follow.

The only line of the test case contains three integers x, y, and z (1 ≤ x, y, z ≤ 10^9).

Output

For each test case, print the answer:

  * "NO" in the only line of the output if a solution doesn't exist; 
  * or "YES" in the first line and any valid triple of positive integers a, b and c (1 ≤ a, b, c ≤ 10^9) in the second line. You can print a, b and c in any order. 

Example

Input


5
3 2 3
100 100 100
50 49 49
10 30 20
1 1000000000 1000000000


Output


YES
3 2 1
YES
100 100 100
NO
NO
YES
1 1 1000000000

Solution (in JAVA):

Solution:
import java.io.*;
import java.util.StringTokenizer;

public class Main {

    public static void main(String... args) {
        FastScanner scr = new FastScanner();
        int t = scr.nextInt();
        while (t-- > 0)
            solve(scr);

    }

    static void solve(FastScanner in) {
        long x = in.nextLong();
        long y = in.nextLong();
        long z = in.nextLong();

        long a, b, c;
        int cc = 0;
        long max = Math.max(x, Math.max(y, z));
        long min = Math.min(x, Math.min(y, z));
        if (x == max) cc++;
        if (y == max) cc++;
        if (z == max) cc++;

        if (cc > 1) {
            System.out.println("YES");
            System.out.println(max+" "+min+" "+min);
        }else {
            System.out.println("NO");
        }
    }


    static class FastScanner {
        private BufferedReader reader;
        private StringTokenizer tokinizer;


        public FastScanner() {
            initilize(System.in);
        }

        public FastScanner(String path) {
            try {
                initilize(new FileInputStream(new File(path)));
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        }

        private void initilize(InputStream in) {
            reader = new BufferedReader(new InputStreamReader(in));
        }

        private String getToken() {
            while (tokinizer == null || !tokinizer.hasMoreTokens()) {
                try {
                    String str = reader.readLine();
                    if (str != null) tokinizer = new StringTokenizer(str);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return tokinizer.nextToken();
        }


        public int nextInt() {
            return Integer.parseInt(getToken());
        }

        public long nextLong() {
            return Long.parseLong(getToken());
        }

        public double nextDouble() {
            return Double.parseDouble(getToken());
        }

        public String next() {
            return getToken();
        }

        public String nextLine() {
            String str = "";
            try {
                str = reader.readLine();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return str;
        }
    }
}