#include <bits/stdc++.h>
using namespace std;
const long double pi = 4 * atan((long double)1);
const long long mod = 1e9 + 7;
const long long inf = 922337203685477;
const long long nax = 0;
long long t, n;
long long a[55];
string inp;
vector<long long> mini, maxi;
void merge(long long x) {
  vector<long long> v;
  for (long long i = 1; i <= n; i++) {
    if (a[i] == x) {
      v.push_back(i);
    }
  }
  if (x == 1) {
    maxi = v;
  } else {
    mini = v;
  }
}
void cari(long long x) {
  vector<long long> v;
  for (long long i = 1; i <= n; i++) {
    if (a[i] == x || a[i] == 2) {
      v.push_back(i);
    }
  }
  if (v.size() <= 1) {
    return;
  }
  for (long long i = 1; i < v.size(); i += 2) {
    cout << "? " << v[i] << " " << v[i - 1] << '\n' << flush;
    cin >> inp;
    if (x == 1) {
      if (inp == ">" || inp == "=") {
        a[v[i - 1]] = 0;
        a[v[i]] = 1;
      } else {
        a[v[i]] = 0;
        a[v[i - 1]] = 1;
      }
    } else {
      if (inp == "<" || inp == "=") {
        a[v[i - 1]] = 0;
        a[v[i]] = -1;
      } else {
        a[v[i]] = 0;
        a[v[i - 1]] = -1;
      }
    }
  }
}
int main() {
  cin >> t;
  while (t--) {
    maxi.clear(), mini.clear();
    cin >> n;
    for (long long i = 2; i <= n; i += 2) {
      cout << "? " << i << " " << i - 1 << '\n' << flush;
      cin >> inp;
      if (inp == ">" || inp == "=") {
        maxi.push_back(i);
        mini.push_back(i - 1);
        a[i] = 1;
        a[i - 1] = -1;
      } else {
        maxi.push_back(i - 1);
        mini.push_back(i);
        a[i - 1] = 1;
        a[i] = -1;
      }
    }
    if (n == 1) {
      cout << "! 1 1\n" << flush;
      continue;
    }
    if (n & 1) {
      cout << "? " << n << " " << 1 << '\n' << flush;
      cin >> inp;
      if (inp == ">") {
        if (a[1] == 1) {
          a[1] = 0;
        }
        maxi.push_back(n);
        a[n] = 1;
      } else if (inp == "<") {
        if (a[1] == -1) {
          a[1] = 0;
        }
        mini.push_back(n);
        a[n] = -1;
      }
    }
    while (maxi.size() > 1 || mini.size() > 1) {
      if (maxi.size() > 1) {
        cari(1);
        merge(1);
      }
      if (mini.size() > 1) {
        cari(-1);
        merge(-1);
      }
    }
    cout << "! " << mini[0] << " " << maxi[0] << '\n' << flush;
  }
}
