#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
const int N=10005;
using namespace std;
vector<int>G[N];
int n,m,low[N],dfn[N];
int father[N];
int tim;
void Tarjan(int i,int Father){
father[i]=Father;
dfn[i]=low[i]=tim++;
for(int j=0;j<G[i].size();++j){
int k=G[i][j];
if(dfn[k]==-1){
Tarjan(k,i);
low[i]=min(low[i],low[k]);
}
else if(Father!=k){
low[i]=min(low[i],dfn[k]);
}
}
}
int main(){
int a,b;
scanf("%d%d",&n,&m);
for(int i=1;i<=m;++i){
scanf("%d%d",&a,&b);
G[a].push_back(b);
G[b].push_back(a);
}
memset(dfn,-1,sizeof(dfn));
memset(father,0,sizeof(father));
memset(low,-1,sizeof(low));
Tarjan(1,0);
for(int i=1;i<=n;++i){
int v=father[i];
if(v>0&&low[i]>dfn[v])
printf("%d %d\n",v,i);
}
return 0;
}