#include <bits/stdc++.h>
using namespace std;
long long N,M,S,s[100011],a,b,broj,T;
bool ex[100011],nemoze;
int komp[100011],mst[100011];
vector <int> pov[100011],pravi[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<pravi[j].size();i++){
            if(komp[pravi[j][i]]!=0) continue;
            komp[pravi[j][i]]=k;
            q.push(pravi[j][i]);
        }
        q.pop();
    }
    return;
}

int PovPravi(){
    int br=0;
    for(int i=1;i<=N;i++){
        if(komp[i]==0 && ex[i]==0){
            br++;
            bfs(i,br);
        }
    }
    return br;
}

void ret(){
    for(int i=1;i<=N;i++){
        ex[i]=0;
        komp[i]=0;
        mst[i]=0;
        pov[i].clear();
        pravi[i].clear();
    }
    broj=0;
    return;
}

void ProvIskljucenih(){
    ///svaki koji je iskljucen MORA biti povezan sa bar jednim koji nije(jer da jeste) onda bi drugi iskljcen imao 2 veze, sto nije po uslovu zadatka;
    nemoze=false;
    bool dobar=0;
    for(int i=1;i<=N;i++){
        if(ex[i]){
            dobar=0;
            for(int j=0;j<pov[i].size();j++){
                if(!ex[pov[i][j]]) {
                    dobar=true;
                    break;
                }
            }
            if(!dobar){
                nemoze=true;
                return;
            }
        }
    }
    return;
}

void Resiti(){
    for(int i=1;i<=N;i++){
        if(ex[i]==0){
            mst[i]=1;
            q.push(i);
            while(q.size()){
                int x=q.front();
                for(int j=0;j<pravi[x].size();j++){
                    if(!mst[pravi[x][j]]){
                        mst[pravi[x][j]]=1;
                        cout<< i << " " << pravi[x][j] << "\n";
                        q.push(pravi[x][j]);
                    }
                }
                q.pop();
            }
        }
    }

    for(int i=1;i<=N;i++){
        if(ex[i]){
            for(int j=0;j<pov[i].size();j++){
                if(!ex[pov[i][j]]) {
                    cout << i << " " << pov[i][j] << "\n";
                    break;
                }
            }
        }
    }

    return;
}

int main(){
    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]){
                pravi[a].push_back(b);
                pravi[b].push_back(a);
            }
        } ///definitivno okej
        broj=PovPravi();
        if(broj>1){
            cout << -1<<"\n";
            ret();
            continue;
        } ///do ovde prolazi
        ProvIskljucenih();
        if(nemoze){
            cout << -1<<"\n";
            ret();
            continue;
        }
        cout << N-1 << "\n";

        Resiti();




        ret();

    }

    return 0;
}