#include <bits/stdc++.h>
using namespace std;
const int MAXN = 400100;
vector<int> grafo[MAXN];
int low[MAXN], disc[MAXN];
map<pair<int, int>, int> ponte, mapa;
bool process[MAXN];
vector<pair<int, int>> resp;
int niv[MAXN];
pair<int, int> rr[MAXN];
void dfs(int x, int p) {
  static int time = 0;
  process[x] = true;
  disc[x] = low[x] = time++;
  for (int i = 0; i < grafo[x].size(); i++) {
    int at = grafo[x][i];
    if (at == p) continue;
    if (process[at] == true) {
      low[x] = min(low[x], disc[at]);
      continue;
    }
    dfs(at, x);
    low[x] = min(low[x], low[at]);
    if (disc[x] < low[at]) ponte[{x, at}] = ponte[{at, x}] = 1;
  }
}
int solve(int x) {
  process[x] = true;
  int r = 0;
  for (int i = 0; i < grafo[x].size(); i++) {
    int at = grafo[x][i];
    if (process[at] == true || ponte.find({x, at}) != ponte.end()) continue;
    r += solve(at);
  }
  r++;
  return r;
}
void func(int x, int p) {
  process[x] = true;
  for (int i = 0; i < grafo[x].size(); i++) {
    int at = grafo[x][i];
    if (at == p) continue;
    if (process[at] == true) {
      if (niv[x] > niv[at]) resp.push_back({x, at});
      continue;
    }
    niv[at] = niv[x] + 1;
    func(at, x);
    if (ponte.find({at, x}) != ponte.end())
      resp.push_back({at, x});
    else
      resp.push_back({x, at});
  }
}
int main() {
  memset(process, false, sizeof process);
  int n, m;
  cin >> n >> m;
  for (int i = 1; i <= m; i++) {
    int x, y;
    cin >> x >> y;
    grafo[x].push_back(y), grafo[y].push_back(x);
    mapa[{x, y}] = mapa[{y, x}] = i;
  }
  dfs(1, 1);
  memset(process, false, sizeof process);
  pair<int, int> g = {-1, -1};
  for (int i = 1; i <= n; i++) {
    if (process[i] == true) continue;
    int h = solve(i);
    if (g.second < h) g = {i, h};
  }
  cout << g.second << endl;
  memset(process, false, sizeof process);
  niv[1] = 0;
  func(g.first, g.first);
  for (int i = 0; i < resp.size(); i++) {
    rr[mapa[resp[i]]] = resp[i];
  }
  for (int i = 1; i <= m; i++) {
    cout << rr[i].first << " " << rr[i].second << endl;
  }
}
