You are given a permutation p_1, p_2, ..., p_n. Recall that sequence of n integers is called a permutation if it contains all integers from 1 to n exactly once.

Find three indices i, j and k such that: 

  * 1 ≤ i < j < k ≤ n; 
  * p_i < p_j and p_j > p_k. 

Or say that there are no such indices.

Input

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

Next 2T lines contain test cases — two lines per test case. The first line of each test case contains the single integer n (3 ≤ n ≤ 1000) — the length of the permutation p.

The second line contains n integers p_1, p_2, ..., p_n (1 ≤ p_i ≤ n; p_i ≠ p_j if i ≠ j) — the permutation p.

Output

For each test case: 

  * if there are such indices i, j and k, print YES (case insensitive) and the indices themselves; 
  * if there are no such indices, print NO (case insensitive). 



If there are multiple valid triples of indices, print any of them.

Example

Input


3
4
2 1 4 3
6
4 6 1 2 5 3
5
5 3 1 2 4


Output


YES
2 3 4
YES
3 5 6
NO
import java.util.*;
import java.io.*;
import java.math.BigInteger;

public class Solution {

    static class Pair<A, B> {

        A parent;
        B rank;

        Pair(A parent, B rank) {
            this.rank = rank;
            this.parent = parent;
        }
    }
    static class Node {
        int r;
        int c;
        int value;
        Node(int i,int j) {
            r=i;
            c=j;
            value=0;
        }
    }
    static int m=1000000007;
    static ArrayList<Integer> graph[];
    public static void main(String[] args) throws IOException {
        FastReader s1 = new FastReader();
        StringBuilder sb = new StringBuilder();
        int t=s1.I();
        while(t--!=0)
        {
            int n=s1.I();
            int ar[] = new int[n];
            for(int i=0;i<n;i++)
            {
                ar[i]=s1.I();
            }
            int i=1;
            for(i=1;i<n-1;i++)
            {
                int prev=-1;
                for(int j=i-1;j>=0;j--)
                {
                    if(ar[j]<ar[i])
                    {
                        prev=j;
                        break;
                    }
                }
                int next=-1;
                for(int j=i+1;j<n;j++)
                {
                    if(ar[j]<ar[i])
                    {
                        next=j;
                        break;
                    }
                }
                if(prev!=-1 && next!=-1)
                {
                    sb.append("YES\n");
                    sb.append((prev+1)+" "+(i+1)+" "+(next+1)).append("\n");
                    break;
                }
            }
            if(i==n-1)
            {
                sb.append("NO\n");
            }
        }
        System.out.println(sb);
    }
    static int lis(ArrayList<Integer> ar,int i)
    {
        int n=ar.size();
        if(i==n-1)
            return 1;
        if(ar.get(i)<ar.get(i+1))
        {
            int count=1;
            while(i<n-1 && ar.get(i)<ar.get(i+1) && count<4)
            {
                i++;
                count++;
            }
            return count;
        }
        else
        {
            int count=1;
            while(i<n-1 && ar.get(i)>ar.get(i+1) && count<4)
            {
                i++;
                count++;
            }
            return -count;
        }
    }
    static long lcm(int a,int b)
    {
        long h=gcd(a,b);
        long ans=(a/h)*(b/h);
        ans=ans*h;
        return ans;
    }
    static class FastReader {

        BufferedReader br;
        StringTokenizer st;

        public FastReader() {
            br = new BufferedReader(new InputStreamReader(System.in));
        }

        String next() {
            while (st == null || !st.hasMoreElements()) {
                try {
                    st = new StringTokenizer(br.readLine());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return st.nextToken();
        }

        int I() {
            return Integer.parseInt(next());
        }

        long L() {
            return Long.parseLong(next());
        }

        double D() {
            return Double.parseDouble(next());
        }

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

    static long gcd(long a, long b) {
        if (a % b == 0) {
            return b;
        }
        return gcd(b, a % b);
    }

    static float power(float x, int y) {
        float temp;
        if (y == 0) {
            return 1;
        }
        temp = power(x, y / 2);

        if (y % 2 == 0) {
            return temp * temp;
        } else {
            if (y > 0) {
                return x * temp * temp;
            } else {
                return (temp * temp) / x;
            }
        }
    }
    static long pow(long x, long y) {
        long res = 1;
        x = x % m;
        if (x < 0) {
            x += m;
        }
        while (y > 0) {
            if ((y & 1) == 1) {
                res = (res * x) % m;
                if (res < 0) {
                    res += m;
                }
            }
            y = y >> 1;
            x = (x * x) % m;
            if (x < 0) {
                x = x + m;
            }
        }
        res = res % m;
        if (res < 0) {
            res += m;
        }
        return res;
    }

    static void sieveOfEratosthenes(int n) {
        ArrayList<Integer> prime = new ArrayList<Integer>();
        boolean Prime[] = new boolean[n + 1];
        for (int i = 2; i < n; i++) {
            Prime[i] = true;
        }

        for (int p = 2; p * p <= n; p++) {
            if (Prime[p] == true) {
                prime.add(p);
                for (int i = p * p; i <= n; i += p) {
                    Prime[i] = false;
                }
            }
        }
    }
}