#include <iostream>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <vector>
#include <iomanip>
#include <queue>
#define rep(i,n) for(int i=0;i<n;i++)
#define fs first
#define sc second
#define mod 1000000007
using namespace std;
int main()
{
//freopen("input.txt","r",stdin);
//freopen("output.txt","w",stdout);
//std::ios::sync_with_stdio(false);
vector<int> big,small;
int n,t,mn,mx;
char c;
cin>>t;
rep(w,t)
{
big.clear();
small.clear();
cin>>n;
for(int i=1;i<n;i+=2)
{
cout<<"? "<<i<<' '<<i+1<<endl;
cin>>c;
if(c=='<')
{
small.push_back(i);
big.push_back(i+1);
}
else
{
small.push_back(i+1);
big.push_back(i);
}
}
if(n%2==1)
{
small.push_back(n);
big.push_back(n);
}
mn=small[0];
rep(i,small.size()-1)
{
cout<<"? "<<mn<<' '<<small[i+1]<<endl;
cin>>c;
if(c=='>')mn=small[i+1];
}
mx=big[0];
rep(i,big.size()-1)
{
cout<<"? "<<mx<<' '<<big[i+1]<<endl;
cin>>c;
if(c=='<')mx=big[i+1];
}
cout<<"! "<<mn<<' '<<mx<<endl;
}
return 0;
}
478A - Initial Bet | 981A - Antipalindrome |
365A - Good Number | 1204B - Mislove Has Lost an Array |
1409D - Decrease the Sum of Digits | 1476E - Pattern Matching |
1107A - Digits Sequence Dividing | 1348A - Phoenix and Balance |
1343B - Balanced Array | 1186A - Vus the Cossack and a Contest |
1494A - ABC String | 1606A - AB Balance |
1658C - Shinju and the Lost Permutation | 1547C - Pair Programming |
550A - Two Substrings | 797B - Odd sum |
1093A - Dice Rolling | 1360B - Honest Coach |
1399C - Boats Competition | 1609C - Complex Market Analysis |
1657E - Star MST | 1143B - Nirvana |
1285A - Mezo Playing Zoma | 919B - Perfect Number |
894A - QAQ | 1551A - Polycarp and Coins |
313A - Ilya and Bank Account | 1469A - Regular Bracket Sequence |
919C - Seat Arrangements | 1634A - Reverse and Concatenate |