#include <bits/stdc++.h>

using namespace std;

#define MAXN 100005
#define int long long

int n,m,s;
map<pair<int,int>,int> edge;
set<int> specialnode;
vector<int> answer;
vector<int> adj[MAXN];
int parent[MAXN],siz[MAXN];
int a1[MAXN],a2[MAXN];

int get(int node)
{
    if (parent[node]==node) return node;
    return get(parent[node]);
}

bool unite(int node1,int node2)
{
    node1=get(node1),node2=get(node2);
    if (node1==node2) return false;
    if (siz[node1]<siz[node2]) swap(node1,node2);
    parent[node2]=node1;siz[node1]+=siz[node2];
    return true;
}

int32_t main()
{
    int t;cin>>t;
    for (int z=0;z<t;z++)
    {
        cin>>n>>m>>s;
        for (int i=1;i<=s;i++) {int node;cin>>node;specialnode.insert(node);}
        for (int i=1;i<=m;i++) {int u,v;cin>>u>>v;edge[{u,v}]=i;a1[i]=u;a2[i]=v;}
        for (int i=1;i<=n;i++) {parent[i]=i;siz[i]=1;}
        for (auto&p:edge)
        {
            int node1=p.first.first,node2=p.first.second;
            if (specialnode.find(node1)!=specialnode.end()) continue;
            if (specialnode.find(node2)!=specialnode.end()) continue;
            if (unite(node1,node2)) answer.push_back(p.second);
        }
        for (auto&p:edge)
        {
            int node1=p.first.first,node2=p.first.second;
            if (specialnode.find(node1)!=specialnode.end() and specialnode.find(node2)!=specialnode.end()) continue;
            if (specialnode.find(node1)==specialnode.end() and specialnode.find(node2)==specialnode.end()) continue;
            if (unite(node1,node2)) answer.push_back(p.second);
        }
        if ((int)answer.size()<n-1) cout<<-1<<endl;
        else
        {
            cout<<n-1<<endl;
            for (int a:answer) cout<<a1[a]<<" "<<a2[a]<<endl;
        }
        edge.clear();specialnode.clear();answer.clear();
        for (int i=1;i<=n;i++) adj[i].clear();
    }
}