//因为只有一个奇数所以根据前缀和的性质
//奇数点之前都是偶数
//奇数点之后都是奇数 

#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.");
    }

}