#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> pii;
int n, k;
vector<vector<int>> graf;
vector<int> tom_tav;
vector<int> jerry_tav;
void tavot_allit(int akt, int elozo, vector<int>& tavok){
for(int kov : graf[akt]){
if(kov == elozo) continue;
tavok[kov] = tavok[akt] + 1;
tavot_allit(kov, akt, tavok);
}
}
pii legtavolabbi(int kezd){
vector<bool> volt(n+1, false);
queue<int> q;
q.push(kezd);
int akt_szint = 1, kov_szint = 0, tav = 0;
int akt;
int legtavol = -1;
while(!q.empty()){
akt = q.front();
volt[akt] = true;
akt_szint--;
legtavol = akt;
q.pop();
for(int kov : graf[akt]){
if(volt[kov]) continue;
q.push(kov);
kov_szint++;
}
if(akt_szint == 0){
swap(kov_szint, akt_szint);
tav++;
}
}
return {legtavol, tav-1};
}
void megold(){
int tom_kezd, jerry_kezd;
cin >> n >> tom_kezd >> jerry_kezd >> k;
graf.assign(n+1, vector<int>());
tom_tav.assign(n+1, -1);
jerry_tav.assign(n+1, -1);
int a, b;
for(int i = 0; i < n-1; i++){
cin >> a >> b;
graf[a].push_back(b);
graf[b].push_back(a);
}
tom_tav[tom_kezd] = 0;
tavot_allit(tom_kezd, -1, tom_tav);
jerry_tav[jerry_kezd] = 0;
tavot_allit(jerry_kezd, -1, jerry_tav);
// ha Tom rogton kezdes utan elkapja Jerryt
if(tom_tav[jerry_kezd] <= 1){
cout << "IGEN\n";
return;
}
if(2*k+1 > n-1){
cout << "IGEN\n";
return;
}
pii veg1 = legtavolabbi(1);
pii veg2 = legtavolabbi(veg1.first);
int leghosszabb = veg2.second;
if(leghosszabb < 2*k+1){
cout << "IGEN\n";
return;
}
bool tom_elkapja = true;
for(int i = 1; i <= n; i++){
if(tom_tav[i]-1 <= jerry_tav[i]) continue;
if(tom_tav[i] > k){
tom_elkapja = false;
break;
}
}
cout << (tom_elkapja ? "IGEN" : "NEM") << "\n";
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
int t;
cin >> t;
while(t--){
megold();
}
}