Problem: This is an interactive problem.

There is a secret permutation p (1-indexed) of numbers from 1 to n. More formally, for 1 ≤ i ≤ n, 1 ≤ p[i] ≤ n and for 1 ≤ i < j ≤ n, p[i] ≠ p[j]. It is known that p[1]<p[2].

In 1 query, you give 3 distinct integers a,b,c (1 ≤ a,b,c ≤ n), and receive the median of \{|p[a]-p[b]|,|p[b]-p[c]|,|p[a]-p[c]|\}.

In this case, the median is the 2-nd element (1-indexed) of the sequence when sorted in non-decreasing order. The median of \{4,6,2\} is 4 and the median of \{0,123,33\} is 33.

Can you find the secret permutation in not more than 2n+420 queries?

Note: the grader is not adaptive: the permutation is fixed before any queries are made.

Input

The first line of input contains a single integer t (1 ≤ t ≤ 1000) — the number of testcases.

The first line of each testcase consists of a single integer n (20 ≤ n ≤ 100000) — the length of the secret permutation.

It is guaranteed that the sum of n over all test cases does not exceed 100000.

Interaction

For each testcase, you begin the interaction by reading n.

To perform a query, output "? a b c" where a,b,c is the 3 indices you want to use for the query.

Numbers have to satisfy 1 ≤ a,b,c ≤ n and a ≠ b,b ≠ c,a ≠ c.

For each query, you will receive a single integer x: the median of \{|p[a]-p[b]|,|p[b]-p[c]|,|p[a]-p[c]|\}.

In case your query is invalid or you asked more than 2n+420 queries, the interactor will print "−1" and will finish interaction. You will receive Wrong answer verdict. Make sure to exit immediately to avoid getting other verdicts.

When you have determined the secret permutation, output "! p[1] p[2] ... p[n]". If the secret permutation is correct, the interactor will print "1". Otherwise, the interactor will print "-1" and will finish interaction. You will receive Wrong answer verdict. Make sure to exit immediately to avoid getting other verdicts.

After printing a query do not forget to output the end of line and flush the output. Otherwise, you will get Idleness limit exceeded verdict.

To do this, use:

  * fflush(stdout) or cout.flush() in C++;
  * System.out.flush() in Java;
  * flush(output) in Pascal;
  * stdout.flush() in Python;
  * see documentation for other languages.



Hacks:

To hack, use the following format of test:

The first line should contain a single integer t (1 ≤ t ≤ 1000) — the number of testcases.

The first line of each testcase should contain a single integer n (20 ≤ n ≤ 100000) — the length of the secret permutation.

The following line of should contain n integers p[1],p[2],p[3],…,p[n]. p[1]<p[2] and p must be a permutation of integers from 1 to n.

You must ensure that the sum of n over all testcases does not exceed 100000.

Example

Input


1
20

6

9

1

Output




? 1 5 2

? 20 19 2

! 9 10 19 7 16 18 11 14 15 6 20 8 17 4 5 3 12 2 13 1

Note

The secret permutation is \{9,10,19,7,16,18,11,14,15,6,20,8,17,4,5,3,12,2,13,1\}.

For the first query, the values of (a,b,c) is (1,5,2). Since p[1]=9, p[5]=16 and p[2]=10. The return value is the median of \{|9-16|,|16-10|,|9-10|\} which is 6.

For the second query, the values of (a,b,c) is (20,19,2). Since p[20]=1, p[19]=13 and p[2]=10. The return value is the median of \{|1-13|,|13-10|,|1-10|\} which is 9.

By some miracle, we have figured out that the secret permutation is \{9,10,19,7,16,18,11,14,15,6,20,8,17,4,5,3,12,2,13,1\}. We output it and receive 1 from the interactor, meaning that we have guessed the secret permutation correctly.

Solution (in CPP):

Solution:
#include <bits/stdc++.h>

using namespace std;
const int c=200005;
int t[c];
int w, n, ert[c], ans[c], mini, mindb, maxi, dif;
vector<int> sz[c];
int ertek(int a, int b, int c) {
    vector<int> s={abs(t[a]-t[b]), abs(t[a]-t[c]), abs(t[b]-t[c])};
    sort(s.begin(), s.end());
    return s[1];
}
int kerd(int a, int b, int c) {
    cout.flush() << "? " << a << " " << b << " " << c << "\n";
    int x;
    cin >> x;
    //x=ertek(a, b, c);
    return x;
}
int main()
{
    ios_base::sync_with_stdio(false);
    cin >> w;
    while (w--) {
        cin >> n;
        for (int i=1; i<=n; i++) {
            //cin >> t[i];
        }
        for (int i=0; i<=n; i++) {
            ans[i]=0;
            sz[i].clear();
        }
        mini=c, maxi=0, mindb=0;
        for (int i=3; i<=n; i++) {
            ert[i]=kerd(1, 2, i);
            maxi=max(maxi, ert[i]);
            if (ert[i]<mini) {
                mini=ert[i];
                mindb=0;
            }
            if (ert[i]==mini) {
                mindb++;
            }
        }
        if (mindb==1) {
            dif=2*mini;
        } else {
            dif=2*mini-1;
        }
        if (dif>5) {
            vector<int> spec[2];
            int pos=0, pos2;
            for (int i=3; i<=n; i++) {
                if (dif-ert[i]==1) {
                    spec[0].push_back(i);
                }
                if (dif-ert[i]==2) {
                    spec[1].push_back(i);
                }
            }
            for (int a:spec[0]) {
                for (int b:spec[1]) {
                    if (kerd(1, a, b)==1) {
                        pos=a, pos2=b;
                    }
                }
            }
            int kis=0;
            ans[1]=0, ans[2]=dif, ans[pos]=1;
            for (int i=3; i<=n; i++) {
                if (i!=pos) {
                    int x=kerd(1, pos, i);
                    if (ert[i]<dif) {
                        ans[i]=x+1;
                    } else {
                        if (x<dif) {
                            ans[i]=-x;
                        }
                        if (x==dif) {
                            int y=kerd(pos, pos2, i);
                            if (y==x+1) {
                                ans[i]=-x;
                            } else {
                                ans[i]=x+1;
                            }
                        }
                        if (x>dif) {
                            if (x==ert[i]) {
                                ans[i]=-x;
                            } else {
                                ans[i]=x+1;
                            }
                        }
                    }
                    kis=min(kis, ans[i]);
                    //cout << "ertek " << i << " " << ans[i] << "\n";
                }
            }
            kis=-kis+1;
            //cout << "vege " << kis << "\n";
            for (int i=1; i<=n; i++) {
                ans[i]+=kis;
            }
        } else {
            vector<int> spec[3];
            for (int i=3; i<=n; i++) {
                int kul=maxi-ert[i];
                if (kul<=2) {
                    spec[kul].push_back(i);
                }
            }
            int pos=0, pos2=0;
            for (int a:spec[0]) {
                for (int b:spec[1]) {
                    for (int c:spec[2]) {
                        int x=kerd(a, b, c);
                        if (x==1) {
                            pos=a, pos2=b;
                        }
                    }
                }
            }
            ans[pos]=1, ans[pos2]=2;
            for (int i=1; i<=n; i++) {
                if (i!=pos && i!=pos2) {
                    ans[i]=kerd(pos, pos2, i)+2;
                }
            }
            if (ans[1]>ans[2]) {
                for (int i=1; i<=n; i++) {
                    ans[i]=n+1-ans[i];
                }
            }
        }
        cout << "! ";
        for (int i=1; i<=n; i++) {
            cout << ans[i] << " ";
            if (ans[i]!=t[i]) {
                //cout << "nagyonnagybaj\n";
            }
        }
        cout.flush() << "\n";
        int x;
        cin >> x;
    }
    return 0;
}
/*
1
20
2 10 3 4 5 6 7 8 9 1 11 12 13 14 15 16 17 18 19 20

*/