#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const long long INFF = 0x3f3f3f3f3f3f3f3fll;
const long long M = 1e9 + 7;
const long long maxn = 1e6 + 107;
const double pi = acos(-1.0);
const double eps = 0.0000000001;
long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }
template <typename T>
inline void pr2(T x, int k = 64) {
  long long i;
  for (i = 0; i < k; i++) fprintf(stderr, "%d", (x >> i) & 1);
  putchar(' ');
}
template <typename T>
inline void add_(T &A, int B, long long MOD = M) {
  A += B;
  (A >= MOD) && (A -= MOD);
}
template <typename T>
inline void mul_(T &A, long long B, long long MOD = M) {
  A = (A * B) % MOD;
}
template <typename T>
inline void mod_(T &A, long long MOD = M) {
  A %= MOD;
  A += MOD;
  A %= MOD;
}
template <typename T>
inline void max_(T &A, T B) {
  (A < B) && (A = B);
}
template <typename T>
inline void min_(T &A, T B) {
  (A > B) && (A = B);
}
template <typename T>
inline T abs(T a) {
  return a > 0 ? a : -a;
}
inline long long powMM(long long a, long long b, long long mod = M) {
  long long ret = 1;
  for (; b; b >>= 1ll, a = a * a % mod)
    if (b & 1) ret = ret * a % mod;
  return ret;
}
int startTime;
void startTimer() { startTime = clock(); }
void printTimer() {
  fprintf(stderr, "/--- Time: %ld milliseconds ---/\n", clock() - startTime);
}
int e[1007][1007];
int ask(int x, int y) {
  if (e[x][y] != -1) return e[x][y];
  printf("? %d %d\n", x, y);
  fflush(stdout);
  char st[2];
  scanf("%s", st);
  if (st[0] == '<') return 1;
  return 0;
}
void askAll(vector<int> &V) {
  int i, j;
  for (i = 0; i < (int)V.size(); i++) {
    for (j = i + 1; j < (int)V.size(); j++) {
      int now = ask(V[i], V[j]);
      e[V[i]][V[j]] = now;
      e[V[j]][V[i]] = now ^ 1;
    }
  }
}
vector<int> low, high, highs;
int main() {
  int T, _;
  scanf("%d", &T);
  for (_ = 1; _ <= T; _++) {
    int i, j;
    fflush(stdout);
    int n;
    scanf("%d", &n);
    low.clear();
    high.clear();
    highs.clear();
    for (i = 1; i <= n * 2; i++)
      for (j = 1; j <= n * 2; j++) e[i][j] = -1;
    for (i = 1; i <= n; i++) {
      int x = i, y = i + n;
      int now = ask(x, y);
      if (!now) swap(x, y);
      low.push_back(x);
      high.push_back(y);
    }
    askAll(low);
    sort(low.begin(), low.end(), [&](int x, int y) { return e[x][y]; });
    int lowermax = *low.rbegin();
    if (lowermax <= n)
      lowermax += n;
    else
      lowermax -= n;
    for (int v : high)
      if (v != lowermax) highs.push_back(v);
    askAll(highs);
    sort(highs.begin(), highs.end(), [&](int x, int y) { return e[x][y]; });
    int Hsize = highs.size();
    for (i = 0; i < (int)(Hsize + 1) / 2; i++) {
      ask(low[Hsize - i], highs[i]);
    }
    puts("!");
  }
}
