import std.algorithm;
import std.conv;
import std.range;
import std.stdio;
import std.string;

long ask (int lo, int hi)
{
	writeln ("? ", lo, " ", hi);
	stdout.flush ();
	return readln.strip.to !(long);
}

void solve (int n)
{
	auto total = ask (1, n);

	int lo = 1;
	int hi = n;
	while (lo < hi)
	{
		int me = (lo + hi) / 2;
		auto cur = ask (1, me);
		if (cur < total)
		{
			lo = me + 1;
		}
		else
		{
			hi = me;
		}
	}

	int k = hi;
	auto all1 = ask (1, k);
	auto cut1 = ask (1, k - 1);
	auto delta1 = cast (int) (all1 - cut1);

	int j = k - delta1;
	auto all2 = ask (1, j - 1);
	auto cut2 = ask (1, j - 2);
	auto delta2 = cast (int) (all2 - cut2);

	int i = j - 1 - delta2;
	writeln ("! ", i, " ", j, " ", k);
	stdout.flush ();
}

void main ()
{
	auto tests = readln.strip.to !(int);
	foreach (test; 0..tests)
	{
		auto n = readln.strip.to !(int);
		solve (n);
	}
}
