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;
using ll = long long;

int getrand(int n) {
    return((int(rand()) % 107 * 107 * 107 + rand() % 107 * 107 + rand() % 107) % n + 1);
}

void testrand(int n, int& t1, int& t2) {
    const int trial = 10;
    int arr[trial + 1] = {};
    int minres = n + 1;
    for (int i = 1; i <= trial; i++) {
        for (int j = i + 1; j <= trial; j++) {
            for (int k = j + 1; k <= trial; k++) {
                cout << "? " << i << ' ' << j << ' ' << k << endl;
                int temp;
                cin >> temp;
                if (temp < minres) {
                    minres = temp;
                    t1 = i;
                    t2 = j;
                }
            }
        }
    }
    return;
}

int arr[200000] = {};

int main() {
    //ios_base::sync_with_stdio(0); cin.tie(0);
    int t;
    cin >> t;
    for (int i = 1; i <= t; i++) {
        int n;
        cin >> n;
        int t1, t2;
        testrand(n, t1, t2);
        int max1 = 0, maxind1, max2 = 0, maxind2, max3 = 0, maxind3;
        for (int j = 1; j <= n; j++) {
            if (j != t1 && j != t2) {
                cout << "? " << t1 << ' ' << t2 << ' ' << j << endl;
                int temp;
                cin >> temp;
                if (temp > max1) {
                    max3 = max2; maxind3 = maxind2;
                    max2 = max1; maxind2 = maxind1;
                    max1 = temp; maxind1 = j;
                } else if (temp > max2) {
                    max3 = max2; maxind3 = maxind2;
                    max2 = temp; maxind2 = j;
                } else if (temp > max3) {
                    max3 = temp; maxind3 = j;
                }
            }
        }
        if (max1 > max2 && max2 > max3) {
            arr[maxind1] = n; arr[maxind2] = n - 1;
        } else if (max1 == max2) {
            int a1, a2;
            int t3 = 0;
            do {
                t3++;
                while (t3 == maxind1 || t3 == maxind2 || t3 == maxind3) t3++;
                cout << "? " << t3 << ' ' << maxind1 << ' ' << maxind3 << endl;
                cin >> a1;
                cout << "? " << t3 << ' ' << maxind2 << ' ' << maxind3 << endl;
                cin >> a2;
                if (a1 * 2 >= n + 3 && a2 * 2 <= n - 3) {
                    arr[maxind2] = n; arr[maxind3] = n - 1;
                    maxind1 = maxind2; maxind2 = maxind3;
                    break;
                } else if (a1 * 2 <= n - 3 && a2 * 2 >= n + 3) {
                    arr[maxind1] = n; arr[maxind3] = n - 1;
                    maxind2 = maxind3;
                    break;
                }
            } while (1);
        } else {
            int a1, a2;
            int t3 = 0;
            do {
                t3++;
                while (t3 == maxind1 || t3 == maxind2 || t3 == maxind3) t3++;
                cout << "? " << t3 << ' ' << maxind1 << ' ' << maxind3 << endl;
                cin >> a1;
                cout << "? " << t3 << ' ' << maxind1 << ' ' << maxind2 << endl;
                cin >> a2;
                if (a1 * 2 >= n + 3 && a2 * 2 <= n - 3) {
                    arr[maxind1] = n; arr[maxind2] = n - 1;
                    break;
                } else if (a1 * 2 <= n - 3 && a2 * 2 >= n + 3) {
                    arr[maxind1] = n; arr[maxind3] = n - 1;
                    maxind2 = maxind3;
                    break;
                }
            } while (1);
        }
        for (int j = 1; j <= n; j++) {
            if (j != maxind1 && j != maxind2) {
                cout << "? " << maxind1 << ' ' << maxind2 << ' ' << j << endl;
                int temp;
                cin >> temp;
                arr[j] = n - 1 - temp;
            }
        }
        cout << "!";
        for (int j = 1; j <= n; j++) {
            if (arr[1] < arr[2]) cout << " " << arr[j]; else cout << " " << n + 1 - arr[j];
        }
        cout << endl;
        cin >> t1;
    }
    return(0);
}