#include <bits/stdc++.h>
using namespace std;
long long N,M,S,s[100011],a,b,br,T;
bool ex[100011],nemoze;
int komp[100011],mst[100011];
vector <int> pov[100011],izb[100011];
queue <int> q;
void bfs(int x, int k){
    q.push(x);
    komp[x]=k;
    while(q.size()){
        int j=q.front();
        for(int i=0;i<izb[j].size();i++){
            if(komp[izb[j][i]]!=0) continue;
            komp[izb[j][i]]=k;
            q.push(izb[j][i]);
        }
        q.pop();
    }
    return;
}
 void ret(){
    for(int i=1;i<=N;i++){
        komp[i]=0;
        izb[i].clear();
        pov[i].clear();
    }
    return;
 }
void JelPovIzb(){
    br=0;
    for(int i=1;i<=N;i++){
        if(!komp[i]){
            br++;
            komp[i]=br;
            bfs(i,br);

        }
    }
    return;
}
void Put(){
    mst[1]=1;
    q.push(1);
    while(q.size()){
        int x=q.front();
        for(int i=0;i<izb[x].size();i++){
            if(!mst[izb[x][i]]){
                cout << i << " " << izb[x][i] << "\n";
                mst[izb[x][i]]=1;
                q.push(izb[x][i]);
            }
        }

        q.pop();
    }



    return;
}

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cin >> T;
    while(T--){
        cin >> N >> M >> S;
        for(int i=1;i<=S;i++){
            cin >> s[i];
            ex[s[i]]=1;
        }
        for(int i=1;i<=M;i++){
            cin >> a >> b;
            pov[a].push_back(b);
            pov[b].push_back(a);
            if(ex[a] && ex[b]){
            }
            else{
                izb[a].push_back(b);
                izb[b].push_back(a);
            }
        }
        JelPovIzb();
        if(br>1){
            cout << -1 << endl;
            ret();
            continue;
        }
        cout << N-1 << "\n";
        Put();


        ret();

    }

    return 0;
}