#include <bits/stdc++.h>
using namespace std;
const long long mx = 400009;
vector<long long> v[mx];
bool visit[mx], visit1[mx];
long long dis[mx], low[mx];
long long t;
long long par[mx];
long long findp(long long x) {
  if (par[x] == x) return x;
  return par[x] = findp(par[x]);
}
struct node {
  int x, y;
} edge[mx];
map<pair<int, int>, int> mm;
void dfs(long long s, long long p) {
  visit[s] = true;
  dis[s] = low[s] = t++;
  for (auto x : v[s]) {
    if (x == p) continue;
    if (visit[x]) {
      low[s] = min(low[s], dis[x]);
      continue;
    }
    dfs(x, s);
    low[s] = min(low[s], low[x]);
    if (dis[s] < low[x]) continue;
    long long a = findp(x);
    long long b = findp(s);
    if (a != b) par[a] = b;
  }
}
map<long long, long long> check;
void dfs1(long long s, long long p) {
  visit[s] = true;
  dis[s] = low[s] = t++;
  for (auto x : v[s]) {
    if (x == p) continue;
    if (visit[x]) {
      low[s] = min(low[s], dis[x]);
      if (dis[s] > dis[x]) {
        mm[make_pair(s, x)] = true;
      }
      continue;
    }
    dfs1(x, s);
    low[s] = min(low[s], low[x]);
    if (dis[s] < low[x]) {
      mm[make_pair(x, s)] = true;
    } else
      mm[make_pair(s, x)] = true;
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  ;
  long long n, m;
  cin >> n >> m;
  for (long long i = 0; i < m; i++) {
    long long a, b;
    cin >> a >> b;
    v[a].push_back(b);
    v[b].push_back(a);
    edge[i].x = a;
    edge[i].y = b;
  }
  for (long long i = 1; i <= n; i++) {
    par[i] = i;
  }
  dfs(1, -1);
  int maxi = -1;
  int suru;
  for (long long i = 1; i <= n; i++) {
    long long d = findp(i);
    check[d]++;
    if (check[d] > maxi) {
      maxi = check[d];
      suru = i;
    }
  }
  memset(visit, 0, sizeof visit);
  memset(dis, 0, sizeof dis);
  memset(low, 0, sizeof low);
  t = 1;
  cout << maxi << endl;
  dfs1(suru, -1);
  for (int i = 0; i < m; i++) {
    if (mm[{edge[i].x, edge[i].y}])
      cout << edge[i].x << ' ' << edge[i].y << endl;
    else
      cout << edge[i].y << ' ' << edge[i].x << endl;
  }
}
