#include <iostream>
#include <cstring>
#include <cstdio>
#include <map>
using namespace std;
#define MAXN 10005
struct hashv
{
int h1,h2;
};
hashv D[MAXN];
int T[MAXN];
bool inLoop[MAXN];
bool DFS(int pos);
int main()
{
int t, m, n, i;
scanf("%d", &t);
while(t --)
{
memset(T, 0, sizeof(T));
scanf("%d %d", &m, &n);
for(i = 1; i <= m; i ++)
scanf("%d %d", &D[i].h1, &D[i].h2);
for(i = 1; i <= m; i ++)
{
memset(inLoop, false, sizeof(inLoop));
if(!DFS(i))
{
printf("rehash necessary\n");
break;
}
}
if(i > m)
printf("successful hashing\n");
}
return 0;
}
bool DFS(int pos)
{
if( T[ D[pos].h1 ] == 0)
{
T[ D[pos].h1 ] = pos;
return true;
}
else if( T[ D[pos].h2 ] == 0)
{
T[ D[pos].h2 ] = pos;
return true;
}
else
{
if( !inLoop[ D[pos].h1 ] )
{
inLoop[ D[pos].h1 ] = true;
int tmp = T[ D[pos].h1 ];
T[ D[pos].h1 ] = pos;
if( DFS(tmp) )
return true;
T[ D[pos].h1 ] = tmp;
}
if(!inLoop[ D[pos].h2 ])
{
inLoop[ D[pos].h2 ] = true;
int tmp = T[ D[pos].h2 ];
T[ D[pos].h2 ] = pos;
if( DFS(tmp) )
return true;
T[ D[pos].h1 ] = tmp;
}
}
return false;
}