#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 60;
int a[N];
int b[N][N];
int t,n;
bool vis[N];
int main(){
cin >> t;
while(t--){
cin>>n;
memset(vis,0,sizeof(vis));
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
int cnt = n;
int mar = -1;
int flag = 0;
for(int i = 1; i <= n; i++){
cin >> a[i];
b[i][1] = a[i];
if(a[i] == 1){
mar = i;//找到狼的位置,用mar记录
}
}
for(int i = 1; i <= n; i++){
for(int j = 2; j <= n + 1; j++){
cin >> b[i][j];
}
}
int k = 2;
int pos = b[mar][k];//第一晚 狼人杀人(可自刀)
while(mar != -1 && cnt > 2){
if(mar == pos){//如果狼自刀,结束
mar = -1;
if(mar == -1){
cout <<"lieren" << endl;
break;
}
}
else{//狼刀猎人
while(!vis[pos]){//如果猎人还活着
vis[pos] = 1;//猎人死亡
if(pos == mar){//如果下个死亡的是狼的话
cout << "lieren" << endl;
flag = 1;
break;
}
cnt--;
if(cnt <= 2){//如果只剩下两个玩家的话
cout <<"langren" << endl;
flag = 1;
break;
}
while(vis[b[pos][k]] == 1){//直到找出第pos行暗杀名单中最靠前且还活着的玩家。
k++;
}
pos = b[pos][k];//更新
k = 2;//将每个玩家的暗杀名单遍历下标重置。
}
if(flag == 1){//游戏结束,跳出循环
break;
}
}
}
}
return 0;
}
/*
题意:c能整除abs(a-b).
*/
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int t,a,b;
int main(){
cin >> t;
while(t--){
cin >> a >> b;
int flag1 = 0;
int ans1 = 0;
int x = abs(a - b);
if(x == 1){//如果a-b的绝对值为1时,当c=1时,方能整除x.但因c需要>=2,所以不合题意。
cout << "-1 -1" << endl;
continue;
}
if(a == b){//当a,b相同时。
if(a == 1 && b == 1){
cout <<"-1 -1" << endl;
continue;
}
cout << "2" << " " << a << endl;
continue;
}
for(int i = 2; i <= x/i; i++){//找合数,如果是合数的话,有两个不同的约数
if(x % i == 0){
flag1 = 1;
ans1 = i;
break;
}
}
if(flag1 != 1){//质数的话,约数为自己本身
cout << x << " " << x << endl;
}
else{
cout << ans1 <<" " << x << endl;
}
}
return 0;
}