#include<bits/stdc++.h>
using namespace std ;
#define F first
#define S second
const int N = 105 ;
int n , m , k , par[N] , arr[N][N] , lock1[N] , vis[N] , cnt ;
vector<int> nei[N] ;
vector<pair<int,int>> ans ;
int p(int k){
if(par[k]<0) return k ;
else return par[k]=p(par[k]) ;
}
void dfs(int node){
vis[node]=1 ; cnt++ ;
if(cnt==n) return ;
int temp = 0 ;
for(int i:nei[node]){
if(!vis[i] && (lock1[i]==-1 || lock1[i]==node)) dfs(i) , ans.push_back({node,i}) , temp++ ;
if(cnt==n) return ;
}
while(temp--) ans.pop_back() ;
}
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0) ;
memset(par,-1,sizeof(par)) ;
memset(lock1,-1,sizeof(lock1)) ;
cin >> n >> m >> k ;
for(int i=0 ; i<n ; i++){
for(int j=0 ; j<n ; j++){
if(i!=j) arr[i][j]=1 ;
}
}
for(int i=0 ; i<m ; i++){
int a , b ; cin >> a >> b ;
int pa = p(a) , pb = p(b) ;
if(pa==pb || pa!=a){
cout << "NO\n" ; return 0 ;
}
lock1[a]=b ;
}
for(int i=0 ; i<k ; i++){
int a , b ; cin >> a >> b ;
arr[b][a]=0 ;
}
for(int i=0 ; i<n ; i++){
for(int j=0 ; j<n ; j++){
if(arr[i][j]) nei[i].push_back(j) ;
}
}
for(int i=0 ; i<n ; i++){
if(lock1[i]!=-1) continue ;
memset(vis,0,sizeof(vis)) ; cnt=0 ;
dfs(i) ;
if(cnt==n) break ;
}
if(ans.size()!=n-1){
cout << "NO\n" ; return 0 ;
}
for(int i=0 ; i<ans.size() ; i++) cout << ans[i].S << ' ' << ans[i].F << '\n' ;
return 0 ;
}