#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;
//英语 看博友分析 抄博友程序 例题 二分图匹配 背
int da[220];
vector<int> g[220];
int used[220];
int vis[220];
int link[220];
int n,m;
bool dfs(int x)
{
//cout<<"dfs "<<x<<endl;
for(int i=0;i<g[x].size();i++)
{
int y=g[x][i];
//cout<<y<<endl;
if(used[y]==0 && vis[y]==0 )//抄博友程序 背
{
vis[y]=1;
if(link[y]==-1 || dfs(link[y]))
{
link[y]=x;
return true;
}
}
}
return false;
}
int xyl()
{
memset(link,-1,sizeof(link));//抄博友程序
int ans=0;
for(int i=0;i<n;i++)
{
memset(vis,0,sizeof(vis));
if(used[i]==0)
{
if(dfs(i))
{
ans++;
}
}
}
return ans;
}
int main()
{
int T;
cin>>T;
while(T--)
{
//cin>>n>>m;
scanf("%d%d",&n,&m);
memset(da,0,sizeof(da));
for(int i=0;i<n;i++)
{
//cin>>da[i];
scanf("%d",&da[i]);
}
for(int i=0;i<220;i++)
{
g[i].clear();
}
memset(used,0,sizeof(used));
memset(link,-1,sizeof(link));
for(int i=0;i<m;i++)
{
int a,b;
//cin>>a>>b;
scanf("%d%d",&a,&b);
if(da[a]!=da[b])
{
//cout<<"b "<<a<<" "<<b<<endl;
g[a].push_back(b);
g[b].push_back(a);
}
}
vector<int> ve;
ve.clear();
int ans=xyl();
//cout<<"hi0 "<<ans<<endl;
for(int i=0;i<n;i++)
{
if(used[i]==0)
{
used[i]=1;
int t=xyl();
//cout<<"hi1 "<<i<<" "<<t<<endl;
if(t<ans)
{
ans=t;
ve.push_back(i);
}else
{
used[i]=0;
}
}
}
cout<<ve.size()<<" ";
for(int i=0;i<ve.size();i++)
{
cout<<ve[i]<<" ";
}
cout<<endl;
}
return 0;
}