#include <bits/stdc++.h>
using namespace std;
const int INF = 2147483647;
const long double PI = 3.1415926535898;
const long long oo = 9223372036854775807;
const int N = 4e5 + 5;
int n, m;
vector<pair<int, int> > a[N];
int d[N], dd[N], g[N];
int low[N], num[N];
int Time = 0;
vector<pair<int, pair<int, int> > > res, val;
void nhap() {
  cin >> n >> m;
  for (int i = 1; i <= m; i++) {
    int u, v;
    cin >> u >> v;
    a[u].push_back(make_pair(v, i));
    a[v].push_back(make_pair(u, i));
  }
}
void dfs1(int u, int p) {
  num[u] = low[u] = ++Time;
  for (int i = 0; i < a[u].size(); i++) {
    int v = a[u][i].first;
    int vt = a[u][i].second;
    if (!dd[vt]) {
      res.push_back(make_pair(vt, make_pair(u, v)));
      dd[vt] = 1;
    }
    if (v == p) continue;
    if (num[v]) {
      low[u] = min(low[u], num[v]);
    } else {
      dfs1(v, u);
      low[u] = min(low[u], low[v]);
      if (low[v] >= num[v]) {
        dd[vt] = 2;
      }
    }
  }
}
void bfs() {
  int nhom = 0;
  int s, gt = 0;
  queue<int> q;
  for (int i = 1; i <= n; i++) {
    if (g[i]) continue;
    while (q.size()) q.pop();
    q.push(i);
    nhom++;
    int ans = 1;
    g[i] = nhom;
    while (q.size()) {
      int u = q.front();
      q.pop();
      for (int j = 0; j < a[u].size(); j++) {
        int v = a[u][j].first;
        int vt = a[u][j].second;
        if (g[v]) continue;
        if (dd[vt] == 2) continue;
        g[v] = nhom;
        ans++;
        q.push(v);
      }
    }
    if (ans > gt) {
      gt = ans;
      s = i;
    }
  }
  while (q.size()) q.pop();
  q.push(s);
  while (q.size()) {
    int u = q.front();
    q.pop();
    for (int i = 0; i < a[u].size(); i++) {
      int v = a[u][i].first;
      int vt = a[u][i].second;
      if (d[vt]) continue;
      d[vt] = 1;
      if (dd[vt] == 2) {
        val.push_back(make_pair(vt, make_pair(v, u)));
      }
      q.push(v);
    }
  }
  sort(val.begin(), val.end());
  cout << gt << '\n';
  for (int i = 0; i < val.size(); i++)
    cout << val[i].second.first << " " << val[i].second.second << '\n';
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  nhap();
  for (int i = 1; i <= n; i++) {
    if (num[i]) continue;
    dfs1(i, 0);
  }
  for (auto it : res)
    if (dd[it.first] == 1)
      val.push_back(
          make_pair(it.first, make_pair(it.second.first, it.second.second)));
  bfs();
}
