#include <bits/stdc++.h>
#define endl '\n'
#define int long long
#define debug(x) cout << #x << " = " << x << '\n';
using namespace std;

const int MAXN=100009;
vector<int> graf[MAXN];
bool specijalni[MAXN];
int par[MAXN],siz[MAXN];
vector<pair<int,int>> rez;
void init(int n){
    rez.clear();
    for(int i=1; i<=n; i++){
        graf[i].clear();specijalni[i]=0;par[i]=i;siz[i]=1;
    }
}
int ulp(int node){
    if(par[node]==node) return node;
    return ulp(par[node]);
}
void spajaj(int a,int b){
    if(ulp(a)==ulp(b)) return;
    rez.push_back({a,b});
    a=ulp(a);b=ulp(b);
    if(siz[a]<siz[b]) swap(a,b);
    siz[a]+=siz[b];
    par[b]=a;
}




signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);



    int t;
    cin >> t;
    while(t--){
        int n,m,k;
        cin >> n >> m >> k;
        init(n);
        for(int i=1; i<=k; i++){
            int a;cin >> a;specijalni[a]=1;
        }
        for(int i=1; i<=m; i++){
            int a,b;cin >> a >> b;
            graf[a].push_back(b);graf[b].push_back(a);
        }
        for(int i=1; i<=n; i++){
            if(specijalni[i]) continue;
            for(auto x:graf[i]){
                if(specijalni[x]) continue;
                spajaj(i,x);
            }
        }
        set<int> skup;
        for(int i=1; i<=n; i++){
            if(specijalni[i]) continue;
            skup.insert(ulp(i));
        }

        for(int i=1; i<=n; i++){
            if(specijalni[i]){
                for(auto x:graf[i]){
                    if(!specijalni[x]){
                        rez.push_back({i,x});
                        break;
                    }
                }
                continue;
            }
        }
        if(skup.size()>1||rez.size()!=n-1){cout << -1 << endl; continue;}
        cout << n-1 << endl;
        for(auto x:rez)
            cout << x.first << " " << x.second << endl;
    }

    return 0;
}
/*
1
7 8 3
1 5 7
1 6
6 2
2 7
7 4
4 3
4 2
3 6
4 5


*/