//把两个不认识的人互相连边,在判断下有没有环,就OK 了;
#include <iostream>
#include<stdio.h>
#include<string.h>
#include<string>
#include<vector>
using namespace std;
const int maxn=100000+10;
vector<int>map1[maxn];
int n;
int visit[maxn];
int sum[2];
void init()
{
for(int i=1;i<=n;i++)
{
map1[i].clear();
}
}
int flag;
void dfs(int x,int k)
{
visit[x]=k;
sum[k]+=1;
for(int i=0;i<map1[x].size();i++)
{
int k1=map1[x][i];
if(visit[k1]==-1)
dfs(map1[x][i],k^1);
else
{
if((k^1)!=(visit[k1]))
{
flag=1;
return ;
}
}
}
}
void solve()
{
int team0=0;
int team1=0;
int rare=0;
flag=0;
for(int i=1;i<=n;i++)
{
if(visit[i]!=-1)
continue;
if(map1[i].size()==0)
{
rare+=1;
continue;
}
memset(sum,0,sizeof(sum));
dfs(i,1);
if(flag==1)
break;
if(sum[0]<sum[1])
swap(sum[0],sum[1]);
team0+=sum[0];
team1+=sum[1];
}
if(flag==1)
printf("Poor wyh\n");
else
{
team0+=rare;
if(team0==n)
{
team0-=1;
team1=1;
}
printf("%d %d\n",team0,team1);
}
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int m;
memset(visit,-1,sizeof(visit));
scanf("%d%d",&n,&m);
init();
int flag=0;
for(int i=1;i<=m;i++)
{
int a,b;
scanf("%d%d",&a,&b);
map1[a].push_back(b);
map1[b].push_back(a);
}
if(n==0||n==1)
{
printf("Poor wyh\n");
continue;
}
solve();
}
return 0;
}