#include <bits/stdc++.h>

using namespace std;

int check;
queue<int>qu;
vector<bool>sc,mark0,mark1;
vector<vector<int>>graf0,graf1;
vector<pair<int,int>>res;

void reset(int n)
{
    check=0;
    mark0=vector<bool>(n+5,false);
    mark1=vector<bool>(n+5,false);
    sc=vector<bool>(n+5,false);
    graf0=vector<vector<int>>(n+5);
    graf1=vector<vector<int>>(n+5);
    res=vector<pair<int,int>>(0);
}

void bfs0(){
    while(!qu.empty()){
        int u=qu.front();
        qu.pop();
        for(auto i:graf0[u]){
            if(sc[i]&&mark0[i])continue;
            graf1[u].push_back(i);
            if(mark0[i])continue;
            mark0[i]=true;
            qu.push(i);
        }
    }
}

void bfs1(int s){
    qu.push(s);
    mark1[s]=true;
    while(!qu.empty()){
        int u=qu.front();
        check++;
        qu.pop();
        for(auto i:graf1[u]){
            if(mark1[i])continue;
            mark1[i]=true;
            res.push_back({u,i});
            qu.push(i);
        }
    }
}

void solve()
{
    int n,m,s;
    cin>>n>>m>>s;
    reset(n);
    for(int i=0;i<s;i++){
        int x;
        cin>>x;
        sc[x]=true;
    }
    for(int i=0;i<m;i++){
        int u,v;
        cin>>u>>v;
        graf0[u].push_back(v);
        graf0[v].push_back(u);
    }
    for(int i=1;i<=n;i++){
        if(!sc[i])qu.push(i);
    }
    bfs0();
    bfs1(1);
    if(check<n){
        cout<<-1<<'\n';
        return;
    }
    cout<<res.size()<<'\n';
    for(auto i:res)cout<<i.first<<' '<<i.second<<'\n';
}

signed main()
{
    ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    int t;
    cin>>t;
    while(t--)solve();
    return 0;
}