#include <iostream>
#include <vector>
using namespace std;

void resi() {
	int N;	//broj takmicara
	int M;	//broj kanala komunikacije
	int S;	//broj sputanih
	cin >> N >> M >> S;
	
	vector<int> sputani(S);
	vector<bool> je_sputan(N+1, false);
		
	for(int i = 0; i <S; i++) {
		cin >> sputani[i];
		je_sputan[sputani[i]] = true;
	}
		
	vector<pair<int, int>> kanali;
	vector<int> stepen_cvora(N+1, 0);
	vector<vector<int>> komsije(N+1);
		
	for(int i = 0; i < M; i++) {
		int u, v;
		cin >> u >> v;
		kanali.push_back({u, v});
		stepen_cvora[u]++;
		stepen_cvora[v]++;
	
		komsije[u].push_back(v);
		komsije[v].push_back(u);
	}
		
	if(M == N - 1) {
		bool ispravno = true;
		for(int x : sputani) {
			if(stepen_cvora[x] != 1) {
				ispravno = false;
				break;
			}
		}
		if(ispravno) {
			cout << M << '\n';
			for(auto kanal : kanali) {
				cout << kanal.first << " " << kanal.second << '\n';
			}
		}
		else {
			cout << "-1" << '\n';
		}
		return;
	}
		
	if(S >= N - 2) {
		vector<int> slobodni;
		for(int i = 1; i <= N; i++) {
			if(!je_sputan[i]) {
				slobodni.push_back(i);
			}
		}
			
		if(slobodni.size() == 0) {
			if(N == 2 && M > 0) {
				bool povezani = false;
				for(int k : komsije[1]) {
					if(k == 2) povezani = true;
				}
				if(povezani) {
					cout << "1" << '\n';
					cout << "1 2" << '/n';
				}
				else {
					cout << "-1" << '\n';
				}
				return;
			}
		}
			
		if(slobodni.size() == 1) {
			int centar = slobodni[0];
			vector<pair<int, int>> resenje;
			
			for(int x : sputani) {
				bool zakacen = false;
				for(int k : komsije[x]) {
					if(k == centar) {
						zakacen = true;
						break;
					}
				}
				if(zakacen) {
					resenje.push_back({x, centar});
				}
				else{
					break;
				}
			}
			if(resenje.size() == S) {
				cout << resenje.size() << '\n';
				for(auto kanal : resenje) {
					cout << kanal.first << " " << kanal.second << '\n';
				}
			}
			else {
				cout << "-1" << '\n';
			}
			return;
		}
			
		if(slobodni.size() == 2) {
			int A = slobodni[0];
			int B = slobodni[1];
				
			bool povezaniAB = false;
				
			for(int k : komsije[A]) {
				if(k == B) povezaniAB = true;
			}
				
			if(!povezaniAB) {
				cout << "-1" << '/n';
				return;
			}
				
			vector<pair<int, int>> resenje;
			resenje.push_back({A, B});
				
			bool moguce = true;
			for(int x : sputani) {
				bool spojen_A = false;
				bool spojen_B = false;
					
				for(int k : komsije[x]) {
					if(k == A) spojen_A = true;
					if(k == B) spojen_B = true;
				}
					
				if(spojen_A) resenje.push_back({x, A});
				else if(spojen_B) resenje.push_back({x, B});
				else {
					moguce = false;
					break;
				}
			}
				
			if(moguce) {
				cout << resenje.size() << '\n';
				for(auto kanal : resenje) {
					cout << kanal.first << " " << kanal.second << '\n';
				}
			}
			else {
				cout << "-1" << '\n';
			}
			return;
		}
	}
	
	cout << "-1" << '\n';
}

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr);
	
	int T;	//broj test primera
	cin >> T;
	
	while(T--) {
		resi();
	}
	
	
	return 0;
}