//因为只有一个奇数所以根据前缀和的性质
//奇数点之前都是偶数
//奇数点之后都是奇数
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N = 200010;
struct Seq{//输入首项末项公差
int s, e, d;
}seqs[N];
int n;
ll get_sum(int x) {
ll res = 0;
for(int i = 0; i < n; i ++) {
if(seqs[i].s <= x)
res += (min(x,seqs[i].e) - seqs[i].s) / seqs[i].d + 1;//因为有的点的end不一定到达x即二分形成的答案那么就要取mid
}
return res;
}
int main() {
int T;
int r, l;
scanf("%d",&T);
while(T --) {
scanf("%d", &n);
for(int i = 0; i < n; ++ i) {
int s, e, d;
scanf("%d%d%d",&s,&e,&d);
seqs[i] = {s,e,d};
r = max(r,e);//上界就是防线的最远值
}
l = 0;//下界为0
while(l < r) {
int mid = l + r >> 1;
if(get_sum(mid) & 1) r = mid;
else l = mid + 1;
}
//求多少个数就是r用前缀和的思想
auto sum = get_sum(r) - get_sum(r - 1);
if(sum % 2 == 1) cout << r <<" "<< sum << endl;
else puts("There's no weakness.");
}
}