#include <bits/stdc++.h>
using namespace std;
const int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
const int dxx[8] = {-1, -1, 0, 1, 1, 1, 0, -1},
          dyy[8] = {0, 1, 1, 1, 0, -1, -1, -1};
const long long mod = 1000000007;
const int base = 311;
const int N = 4e5 + 5;
int n, m;
vector<int> dsk[N];
int low[N], num[N], cnt;
stack<int> stk;
int ncomp, comp[N], Count[N];
bool mark[N], vis[N];
vector<pair<int, int> > e, edge;
map<int, bool> M[N], dd[N];
void dfs(int u, int pre) {
  low[u] = num[u] = ++cnt;
  stk.push(u);
  for (int v : dsk[u])
    if (v != pre) {
      if (low[v])
        low[u] = min(low[u], low[v]);
      else {
        dfs(v, u);
        low[u] = min(low[u], low[v]);
      }
    }
  if (low[u] == num[u]) {
    int v;
    ncomp++;
    do {
      v = stk.top();
      stk.pop();
      comp[v] = ncomp;
      Count[ncomp]++;
    } while (v != u);
  }
}
void dfs1(int u) {
  vis[u] = 1;
  for (int v : dsk[u]) {
    if (dd[u][v] == 0) {
      dd[u][v] = dd[v][u] = 1;
      M[u][v] = 1;
    }
    if (!vis[v]) dfs1(v);
  }
}
int dfs2(int u) {
  vis[u] = 1;
  int ans = 1;
  for (int v : dsk[u])
    if (mark[v]) {
      if (vis[v]) continue;
      if (M[u].count(v)) ans += dfs2(v);
    }
  return ans;
}
void gogo() {
  cin >> n >> m;
  for (int i = 1; i <= m; ++i) {
    int u, v;
    cin >> u >> v;
    dsk[u].push_back(v);
    dsk[v].push_back(u);
    edge.push_back(make_pair(u, v));
  }
  dfs(1, 1);
  int id = 1, idx = -1;
  for (int i = 1; i <= ncomp; ++i)
    if (Count[i] > Count[id]) id = i;
  for (int i = 1; i <= n; ++i)
    if (comp[i] == id) mark[i] = 1, idx = i;
  dfs1(idx);
  cout << Count[id] << '\n';
  for (pair<int, int> i : edge) {
    if (M[i.first][i.second] == 1)
      cout << i.second << ' ' << i.first;
    else
      cout << i.first << ' ' << i.second;
    cout << '\n';
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  if (fopen("sol"
            ".inp",
            "r")) {
    freopen(
        "sol"
        ".inp",
        "r", stdin);
    freopen(
        "sol"
        ".out",
        "w", stdout);
  }
  gogo();
}
