##题目大意:
给一个图,有n个点,m1条单向边,m2条双向边,保证单向边不形成环,求把双向边怎么变为单向边使得这个图没环
##解题思路:
拓扑排序
##源程序:
#include<cstdio>
#include<queue>
using namespace std;
struct node{
int y,next;
}c[100001];
int into[100001],last[100001],ans[100001],n,m1,m2,len,cnt;
void add(int x,int y)
{
c[++len].y=y;c[len].next=last[x];last[x]=len;into[y]++;
}
void topsort()
{
queue<int> q;
for (int i=1;i<=n;i++)
if (!into[i])
q.push(i);
while (q.size())
{
int x=q.front();q.pop();
ans[x]=++cnt;
for (int i=last[x];i;i=c[i].next)
{
int y=c[i].y;
if (!(--into[y]))
q.push(y);
}
}
}
int main()
{
scanf("%d%d%d",&n,&m1,&m2);
for (int i=1;i<=m1;i++)
{
int a,b;
scanf("%d%d",&a,&b);
add(a,b);
}
topsort();
for (int i=1;i<=m2;i++)
{
int a,b;
scanf("%d%d",&a,&b);
if (ans[a]<ans[b]) printf("%d %d\n",a,b);
else printf("%d %d\n",b,a);
}
}