//pB
#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define pii pair<int, int>
#define S second
#define F first
const int maxn = 3e5 + 10;
const int inf = 1e9;
int n, m, k;
vector<int> ban[maxn], v[maxn];
int cnt[maxn];
vector<pii> ans;
int vis[maxn];
int f1=-1, t1=-1, f2=-1, t2=-1;
bool dfs(int x, int num){
//cout<<x<<" "<<num<<"--\n";
if(num==n){
return 1;
}
for(int i=max(0, num-3); i<n; i++){
if(vis[i]) continue;
if((x==f1 and i==t1) or (x==f2 and i==t2)) continue;
vis[i]=1;
if(dfs(i, num+1)){
ans.push_back({x, i});
return 1;
}
vis[i]=0;
}
return 0;
}
signed main(){
ios_base::sync_with_stdio(0); cin.tie(0);
cin>>n>>m>>k;
if(n<=k){
// cout<<n<<" "<<k;
cout<<"NO";
return 0;
}
while(m--){
int a, b; cin>>a>>b;
v[a].push_back(b);
ans.push_back({a, b});
}
while(k--){
int a, b; cin>>a>>b;
ban[a].push_back(b);
cnt[a]++;
if(f1==-1) f1=a, t1=b;
else f2=a, t2=b;
}
memset(vis, 0, sizeof(vis));
vis[0]=1;
if(dfs(0, 1)){
//cout<<ans.size()<<"\n";
for(int i=ans.size()-1; i>=0; i--)
cout<<ans[i].F<<" "<<ans[i].S<<"\n";
return 0;
}
memset(vis, 0, sizeof(vis));
vis[1]=1;
if(dfs(1, 1)){
// cout<<ans.size()<<"\n";
for(int i=ans.size()-1; i>=0; i++)
cout<<ans[i].S<<" "<<ans[i].F<<"\n";
return 0;
}
memset(vis, 0, sizeof(vis));
vis[2]=1;
if(dfs(2, 1)){
// cout<<ans.size()<<"\n";
for(int i=ans.size()-1; i>=0; i++)
cout<<ans[i].S<<" "<<ans[i].F<<"\n";
return 0;
}
cout<<"NO";
}