#include <bits/stdc++.h>
using namespace std;
struct jieguo {
  int x, y;
} dui[440000];
struct bian {
  int to;
  bian* next;
  bian* ano;
  int v;
  int hao;
} b[880000], *a[440000], *c[440000];
int loc;
int n, m;
int dfsn[440000];
int low[440000];
int vv[440000];
void MAKE(int x, int y, int q) {
  if (!a[x]) {
    a[x] = &b[loc++];
    c[x] = a[x];
    c[x]->to = y;
  } else {
    c[x]->next = &b[loc++];
    c[x] = c[x]->next;
    c[x]->to = y;
  }
  c[x]->hao = q;
}
int ji;
void DFS(int x, int y) {
  ji++;
  dfsn[x] = low[x] = ji;
  bian* now = a[x];
  while (now) {
    int j = now->to;
    if (j != y) {
      if (!dfsn[j]) {
        DFS(j, x);
        low[x] = min(low[x], low[j]);
        if (dfsn[j] == low[j]) {
          now->v = 1;
          now->ano->v = 1;
        }
      } else {
        low[x] = min(low[x], low[j]);
      }
    }
    now = now->next;
  }
}
int DDD(int x) {
  int anss = 0;
  vv[x] = 1;
  bian* now = a[x];
  while (now) {
    int j = now->to;
    if (now->v != 1) {
      if (now->v == 0 && now->ano->v == 0) now->v = 2;
      if (!vv[j]) {
        anss += DDD(j);
      }
    }
    now = now->next;
  }
  return anss + 1;
}
void SOU(int x) {
  vv[x] = 1;
  bian* now = a[x];
  while (now) {
    int j = now->to;
    if (now->v == 1 && now->ano->v == 1) {
      now->ano->v = 2;
    }
    if (!vv[j]) {
      SOU(j);
    }
    now = now->next;
  }
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= m; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    MAKE(x, y, i);
    MAKE(y, x, i);
    b[loc - 1].ano = &b[loc - 2];
    b[loc - 2].ano = &b[loc - 1];
  }
  ji = 0;
  DFS(1, 0);
  int ans = 0;
  int dian = 0;
  for (int i = 1; i <= n; i++) {
    if (!vv[i]) {
      int temp = DDD(i);
      if (ans < temp) {
        ans = temp;
        dian = i;
      }
    }
  }
  memset(vv, 0, sizeof(vv));
  SOU(dian);
  for (int i = 1; i <= n; i++) {
    bian* now = a[i];
    while (now) {
      if (now->v == 2) {
        dui[now->hao].x = i;
        dui[now->hao].y = now->to;
      }
      now = now->next;
    }
  }
  cout << ans << endl;
  for (int i = 1; i <= m; i++) {
    printf("%d %d\n", dui[i].x, dui[i].y);
  }
  return 0;
}
