#include <bits/stdc++.h>
using namespace std;
const long long N = 400001;
long long m, n, tin[N], fup[N], timer, mx;
vector<pair<long long, long long> > a[N];
bool used[N];
pair<long long, long long> b[N];
bool br[N];
map<pair<long long, long long>, bool> ANS;
void dfs(long long v, long long p = -1) {
  used[v] = true;
  tin[v] = fup[v] = timer++;
  for (int i = 0; i < a[v].size(); i++) {
    long long to = a[v][i].first;
    if (to == p) continue;
    if (used[to])
      fup[v] = min(fup[v], tin[to]);
    else {
      dfs(to, v);
      fup[v] = min(fup[v], fup[to]);
      if (fup[to] > tin[v]) {
        br[a[v][i].second] = true;
      }
    }
  }
}
void dfsComp(long long v) {
  used[v] = true;
  timer++;
  for (int i = 0; i < a[v].size(); i++) {
    if (!used[a[v][i].first] && !br[a[v][i].second]) dfsComp(a[v][i].first);
  }
}
void dfsAns(long long v) {
  used[v] = true;
  for (int i = 0; i < a[v].size(); i++) {
    if (!used[a[v][i].first]) {
      if (!br[a[v][i].second])
        ANS[make_pair(v, a[v][i].first)] = true;
      else
        ANS[make_pair(a[v][i].first, v)] = true;
      dfsAns(a[v][i].first);
    } else {
      if (!ANS[make_pair(v, a[v][i].first)] &&
          !ANS[make_pair(a[v][i].first, v)])
        ANS[make_pair(v, a[v][i].first)] = true;
    }
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  cin >> n >> m;
  for (int i = 0; i < m; i++) {
    long long v, to;
    cin >> v >> to;
    v--, to--;
    b[i] = make_pair(v, to);
    a[v].push_back({to, i}), a[to].push_back({v, i});
  }
  timer = 0;
  for (int i = 0; i < n; i++) used[i] = false;
  dfs(0);
  long long ans = 0;
  for (int j = 0; j < n; j++) used[j] = false;
  for (int i = 0; i < n; i++) {
    if (!used[i]) {
      timer = 0;
      dfsComp(i);
      if (ans < timer) ans = timer, mx = i;
    }
  }
  for (int j = 0; j < n; j++) used[j] = false;
  dfsAns(mx);
  cout << ans << endl;
  for (int i = 0; i < m; i++) {
    if (ANS[b[i]]) {
      cout << b[i].first + 1 << " " << b[i].second + 1 << endl;
    } else {
      cout << b[i].second + 1 << " " << b[i].first + 1 << endl;
    }
  }
}
