#include <bits/stdc++.h>

using namespace std;

void dfs(int cvor, vector<vector<int>> &v, vector<bool> &posecen){
    posecen[cvor] = true;

    for(int i = 0; i < v[cvor].size(); i++){
        int sused = v[cvor][i];
        if(!posecen[sused]){
            dfs(sused, v, posecen);
        }
    }
}

bool povezan(int cvor, vector<vector<int>> &v){
    vector<bool> posecen(v.size(), false);
    dfs(cvor, v, posecen);
    for(int i = 1; i < v.size(); i++){
        if(!posecen[i]){
            return false;
        }
    }
    return true;
}

void obrisi(int x, int y, vector<vector<int>> &v){
    auto p = v[x].begin();
    for(auto it = v[x].begin(); it != v[x].end(); it++){
        if(*it==y){
            p = it;
            break;
        }
    }
    v[x].erase(p);
}

void dodaj(int x, int y, vector<vector<int>> &v){
    v[x].push_back(y);
}

void ispisi(vector<vector<int>> &v){
    for(int i = 0; i < v.size(); i++){
        for(int j = 0; j < v[i].size(); j++){
            cout << v[i][j]<< " ";
        }
        cout << "\n";
    }
}

bool slv(int ti, vector<int> &nis, vector<vector<int>> &v){
    int tren = nis[ti];
    vector<int> susedi = v[tren];
    v[tren] = {0};
    bool uspesno = false;
    for(int i = 0; i < susedi.size(); i++){
        v[tren][0] = susedi[i];
        for(int pom = 0; pom < susedi.size(); pom++){
            if(susedi[pom]!=susedi[i]){
                obrisi(susedi[pom], tren, v);
            }
        }
        if(povezan(1,v)){
            if(ti==nis.size()-1){
                //ispisi(v);
                return true;
            }
            return slv(ti+1, nis, v);
        }else{
            for(int pom = 0; pom < susedi.size(); pom++){
                if(susedi[pom]!=susedi[i]){
                    dodaj(susedi[pom], tren, v);
                }
            }
        }
    }
    v[tren] = susedi;
    return uspesno;
}

bool ispunjeno(vector<int> &nis, vector<vector<int>> &v){
    for(int k : nis){
        if(v[k].size()!=1)
            return false;
    }
    return true;
}


int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int t;
    cin >> t;
    while(t--){
        int n, m, s;
        cin >> n >> m >> s;
        vector<int> nis(s);
        for(int i = 0; i < s; i++){
            cin >> nis[i];
        }
        vector<vector<int>> v(n+1, vector<int>());
        for(int i = 0; i < m; i++){
            int a, b;
            cin >> a >> b;
            v[a].push_back(b);
            v[b].push_back(a);
        }

        if(!slv(0, nis, v) && !ispunjeno(nis, v)){
            cout << "-1\n";
        }else{
            int br = 0;
            for(int i = 1; i <= n; i++){
                for(int j = 0; j < v[i].size(); j++){
                    if(i < v[i][j])
                        br++;
                }
            }
            cout << br << "\n";
            for(int i = 1; i <= n; i++){
                for(int j = 0; j < v[i].size(); j++){
                    if(i < v[i][j])
                        cout << i << " " << v[i][j] << "\n";
                }
            }
        }
    }
    return 0;
}
/*
1
4 5 1
1
1 2
1 4
1 3
2 4
3 4
*/