#include <bits/stdc++.h>
using namespace std;
const int N = 1000 * 300 + 100;
vector<pair<int, int> > v[N], e;
pair<int, int> dir[N];
bool mark[N], mark2[N], use[N];
void sfd(int p) {
  mark2[p] = true;
  for (int i = 0; i < v[p].size(); i++) {
    int id = v[p][i].second, q = v[p][i].first;
    if (use[id] == false && mark2[q] == false) {
      use[id] = true;
      dir[id].first = q;
      dir[id].second = p;
      sfd(q);
    } else if (dir[id].first == q && mark2[q] == false) {
      sfd(q);
    }
  }
}
void dfs(int p) {
  mark[p] = true;
  for (int i = 0; i < v[p].size(); i++) {
    int id = v[p][i].second, q = v[p][i].first;
    if (mark[q] == false) {
      dir[id].first = p;
      dir[id].second = q;
      use[id] = true;
      dfs(q);
    }
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  int n, m;
  cin >> n >> m;
  for (int i = 0; i < m; i++) {
    int a, b;
    cin >> a >> b;
    v[a].push_back(make_pair(b, i));
    v[b].push_back(make_pair(a, i));
    e.push_back(make_pair(a, b));
  }
  dfs(1);
  sfd(1);
  for (int i = 1; i <= n; i++)
    if (mark[i] == false || mark2[i] == false) {
      cout << 0;
      return 0;
    }
  for (int i = 0; i < m; i++) {
    if (use[i])
      cout << dir[i].first << ' ' << dir[i].second << '\n';
    else
      cout << e[i].first << ' ' << e[i].second << '\n';
  }
  return 0;
}
