#include<bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define str string
#define FOR(i,a,b) for(int i = (a) , _b = (b) ; i <= _b ; i++)
#define FOD(i,a,b) for(int i = (a) , _b = (b) ; i < _b ; i++)
#define REP(i,a,b) for(int i = (a) , _b = (b) ; i >= _b ; i--)
#define RED(i,a,b) for(int i = (a) , _b = (b) ; i > _b ; i--)
#define CL(a,x) memset(a,x,sizeof(a))
#define MASK(x) (1LL << (x))
#define fi first
#define se second
#define pii pair<int,int>
#define pb push_back
#define endl '\n'
#define NAME
using namespace std;
const int N = 1e6 + 7 , MOD = 1e9 + 7;
int n, m;
vector<int> a[N];
int timeDFS, scc_cnt;
int num[N], low[N], on[N], id[N], rep[N];
bool check[N];
stack<int> st;
vector<vector<int>> din, dout;
vector<pii> res;
int in[N], out[N];
vector<int> dag[N];
void DFS(int u){
num[u] = low[u] = ++timeDFS;
st.push(u);
on[u] = true;
for(int v : a[u]){
if(!num[v]){
DFS(v);
low[u] = min(low[u], low[v]);
}
else if(on[v])low[u] = min(low[u], num[v]);
}
if(low[u] == num[u]){
++scc_cnt;
rep[scc_cnt] = u;
while(true){
int v = st.top();
st.pop();
on[v] = 0;
id[v] = scc_cnt;
if(u == v) break;
}
}
}
void BFS(int st){
queue<int> q;
q.push(st);
check[st] = true;
vector<int> d1, d2;
while(!q.empty()){
int u = q.front(); q.pop();
if(in[u] == 0)d1.pb(u);
if(out[u] == 0)d2.pb(u);
for(int v : dag[u])if(!check[v]){
q.push(v);
check[v] = true;
}
}
din.pb(d1);
dout.pb(d2);
}
void process(){
if(scc_cnt == 1)return;
vector<int> remain_in, remain_out;
int temp1 = -1, temp2 = -1;
FOD(i,0,din.size()){
int s = din[i].back();din[i].pop_back();
int t = dout[i].back();dout[i].pop_back();
if(i == 0)temp1 = s;
else res.pb({temp2, s});
temp2 = t;
for(int x : din[i])remain_in.pb(x);
for(int x : dout[i])remain_out.pb(x);
}
res.pb({temp2, temp1});
FOD(i,0,max(remain_in.size(), remain_out.size())){
int u = (i < (int)remain_out.size()) ? remain_out[i] : temp2;
int v = (i < (int)remain_in.size()) ? remain_in[i] : temp1;
res.pb({u, v});
}
}
void load(){
FOR(i,1,n)if(!num[i])DFS(i);
FOR(u,1,n)for(int v : a[u])if(id[u] != id[v]){
in[id[v]]++;
out[id[u]]++;
dag[id[u]].pb(id[v]);
dag[id[v]].pb(id[u]);
}
FOR(i,1,scc_cnt){
sort(dag[i].begin(), dag[i].end());
dag[i].erase(unique(dag[i].begin(), dag[i].end()), dag[i].end());
}
FOR(i,1,scc_cnt)if(!check[i])BFS(i);
}
void debug(){
cout << "-----------------------" << endl;
FOR(i,1,n)cout << i << " : " << id[i] << endl;
cout << endl << endl;
cout << "din : ";
FOD(i,0,din.size())for(int u : din[i])cout << u << "(" << rep[u] << ") ";
cout << endl;
cout << "dout : ";
FOD(i,0,dout.size())for(int u : dout[i])cout << u << "(" << rep[u] << ") ";
cout << endl << endl;
cout << "-----------------------" << endl;
}
int main(){
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin >> n >> m;
FOR(i,1,m){
int u, v; cin >> u >> v;
a[u].pb(v);
}
load();
//debug();
process();
cout << res.size() << endl;
for(pii x : res)cout << rep[x.fi] << " " << rep[x.se] << endl;
return 0;
}
/*
7 8
1 2
2 3
3 1
1 4
3 4
5 6
6 7
5 7
*/
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSB1bGwgdW5zaWduZWQgbG9uZyBsb25nCiNkZWZpbmUgc3RyIHN0cmluZwojZGVmaW5lIEZPUihpLGEsYikgZm9yKGludCBpID0gKGEpICwgX2IgPSAoYikgOyBpIDw9IF9iIDsgaSsrKQojZGVmaW5lIEZPRChpLGEsYikgZm9yKGludCBpID0gKGEpICwgX2IgPSAoYikgOyBpIDwgX2IgOyBpKyspCiNkZWZpbmUgUkVQKGksYSxiKSBmb3IoaW50IGkgPSAoYSkgLCBfYiA9IChiKSA7IGkgPj0gX2IgOyBpLS0pCiNkZWZpbmUgUkVEKGksYSxiKSBmb3IoaW50IGkgPSAoYSkgLCBfYiA9IChiKSA7IGkgPiBfYiA7IGktLSkKI2RlZmluZSBDTChhLHgpIG1lbXNldChhLHgsc2l6ZW9mKGEpKQojZGVmaW5lIE1BU0soeCkgKDFMTCA8PCAoeCkpCiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBwaWkgcGFpcjxpbnQsaW50PgojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIGVuZGwgJ1xuJwojZGVmaW5lIE5BTUUKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKY29uc3QgaW50IE4gPSAxZTYgKyA3ICwgTU9EID0gMWU5ICsgNzsKaW50IG4sIG07CnZlY3RvcjxpbnQ+IGFbTl07CmludCB0aW1lREZTLCBzY2NfY250OwppbnQgbnVtW05dLCBsb3dbTl0sIG9uW05dLCBpZFtOXSwgcmVwW05dOwpib29sIGNoZWNrW05dOwpzdGFjazxpbnQ+IHN0Owp2ZWN0b3I8dmVjdG9yPGludD4+IGRpbiwgZG91dDsKdmVjdG9yPHBpaT4gcmVzOwppbnQgaW5bTl0sIG91dFtOXTsKdmVjdG9yPGludD4gZGFnW05dOwogCnZvaWQgREZTKGludCB1KXsKICAgIG51bVt1XSA9IGxvd1t1XSA9ICsrdGltZURGUzsKICAgIHN0LnB1c2godSk7CiAgICBvblt1XSA9IHRydWU7CiAgICBmb3IoaW50IHYgOiBhW3VdKXsKICAgICAgICBpZighbnVtW3ZdKXsKICAgICAgICAgICAgREZTKHYpOwogICAgICAgICAgICBsb3dbdV0gPSBtaW4obG93W3VdLCBsb3dbdl0pOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmKG9uW3ZdKWxvd1t1XSA9IG1pbihsb3dbdV0sIG51bVt2XSk7CiAgICB9CiAgICBpZihsb3dbdV0gPT0gbnVtW3VdKXsKICAgICAgICArK3NjY19jbnQ7CiAgICAgICAgcmVwW3NjY19jbnRdID0gdTsKICAgICAgICB3aGlsZSh0cnVlKXsKICAgICAgICAgICAgaW50IHYgPSBzdC50b3AoKTsKICAgICAgICAgICAgc3QucG9wKCk7CiAgICAgICAgICAgIG9uW3ZdID0gMDsKICAgICAgICAgICAgaWRbdl0gPSBzY2NfY250OwogICAgICAgICAgICBpZih1ID09IHYpIGJyZWFrOwogICAgICAgIH0KICAgIH0KfQogCnZvaWQgQkZTKGludCBzdCl7CiAgICBxdWV1ZTxpbnQ+IHE7CiAgICBxLnB1c2goc3QpOwogICAgY2hlY2tbc3RdID0gdHJ1ZTsKICAgIHZlY3RvcjxpbnQ+IGQxLCBkMjsKICAgIHdoaWxlKCFxLmVtcHR5KCkpewogICAgICAgIGludCB1ID0gcS5mcm9udCgpOyBxLnBvcCgpOwogICAgICAgIGlmKGluW3VdID09IDApZDEucGIodSk7CiAgICAgICAgaWYob3V0W3VdID09IDApZDIucGIodSk7CiAgICAgICAgZm9yKGludCB2IDogZGFnW3VdKWlmKCFjaGVja1t2XSl7CiAgICAgICAgICAgIHEucHVzaCh2KTsKICAgICAgICAgICAgY2hlY2tbdl0gPSB0cnVlOwogICAgICAgIH0KICAgIH0KICAgIGRpbi5wYihkMSk7CiAgICBkb3V0LnBiKGQyKTsKfQp2b2lkIHByb2Nlc3MoKXsKICAgIGlmKHNjY19jbnQgPT0gMSlyZXR1cm47CiAgICB2ZWN0b3I8aW50PiByZW1haW5faW4sIHJlbWFpbl9vdXQ7CiAgICBpbnQgdGVtcDEgPSAtMSwgdGVtcDIgPSAtMTsKICAgIEZPRChpLDAsZGluLnNpemUoKSl7CiAgICAgICAgaW50IHMgPSBkaW5baV0uYmFjaygpO2RpbltpXS5wb3BfYmFjaygpOwogICAgICAgIGludCB0ID0gZG91dFtpXS5iYWNrKCk7ZG91dFtpXS5wb3BfYmFjaygpOwogICAgICAgIGlmKGkgPT0gMCl0ZW1wMSA9IHM7CiAgICAgICAgZWxzZSByZXMucGIoe3RlbXAyLCBzfSk7CiAgICAgICAgdGVtcDIgPSB0OwogICAgICAgIGZvcihpbnQgeCA6IGRpbltpXSlyZW1haW5faW4ucGIoeCk7CiAgICAgICAgZm9yKGludCB4IDogZG91dFtpXSlyZW1haW5fb3V0LnBiKHgpOwogICAgfQogICAgcmVzLnBiKHt0ZW1wMiwgdGVtcDF9KTsKICAgIEZPRChpLDAsbWF4KHJlbWFpbl9pbi5zaXplKCksIHJlbWFpbl9vdXQuc2l6ZSgpKSl7CiAgICAgICAgaW50IHUgPSAoaSA8IChpbnQpcmVtYWluX291dC5zaXplKCkpID8gcmVtYWluX291dFtpXSA6IHRlbXAyOwogICAgICAgIGludCB2ID0gKGkgPCAoaW50KXJlbWFpbl9pbi5zaXplKCkpID8gcmVtYWluX2luW2ldIDogdGVtcDE7CiAgICAgICAgcmVzLnBiKHt1LCB2fSk7CiAgICB9Cn0Kdm9pZCBsb2FkKCl7CiAgICBGT1IoaSwxLG4paWYoIW51bVtpXSlERlMoaSk7CiAgICBGT1IodSwxLG4pZm9yKGludCB2IDogYVt1XSlpZihpZFt1XSAhPSBpZFt2XSl7CiAgICAgICAgaW5baWRbdl1dKys7CiAgICAgICAgb3V0W2lkW3VdXSsrOwogICAgICAgIGRhZ1tpZFt1XV0ucGIoaWRbdl0pOwogICAgICAgIGRhZ1tpZFt2XV0ucGIoaWRbdV0pOwogICAgfQogCiAgICBGT1IoaSwxLHNjY19jbnQpewogICAgICAgIHNvcnQoZGFnW2ldLmJlZ2luKCksIGRhZ1tpXS5lbmQoKSk7CiAgICAgICAgZGFnW2ldLmVyYXNlKHVuaXF1ZShkYWdbaV0uYmVnaW4oKSwgZGFnW2ldLmVuZCgpKSwgZGFnW2ldLmVuZCgpKTsKICAgIH0KIAogICAgRk9SKGksMSxzY2NfY250KWlmKCFjaGVja1tpXSlCRlMoaSk7Cn0KIAp2b2lkIGRlYnVnKCl7CiAgICBjb3V0IDw8ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPDwgZW5kbDsKICAgIEZPUihpLDEsbiljb3V0IDw8IGkgPDwgIiA6ICIgPDwgaWRbaV0gPDwgZW5kbDsKICAgIGNvdXQgPDwgZW5kbCA8PCBlbmRsOwogICAgY291dCA8PCAiZGluIDogIjsKICAgIEZPRChpLDAsZGluLnNpemUoKSlmb3IoaW50IHUgOiBkaW5baV0pY291dCA8PCB1IDw8ICIoIiA8PCByZXBbdV0gPDwgIikgICI7CiAgICBjb3V0IDw8IGVuZGw7CiAgICBjb3V0IDw8ICJkb3V0IDogIjsKICAgIEZPRChpLDAsZG91dC5zaXplKCkpZm9yKGludCB1IDogZG91dFtpXSljb3V0IDw8IHUgPDwgIigiIDw8IHJlcFt1XSA8PCAiKSAgIjsKICAgIGNvdXQgPDwgZW5kbCA8PCBlbmRsOwogICAgY291dCA8PCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iIDw8IGVuZGw7Cn0KIAppbnQgbWFpbigpewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsgY2luLnRpZSgwKTsgY291dC50aWUoMCk7CiAgICBjaW4gPj4gbiA+PiBtOwogICAgRk9SKGksMSxtKXsKICAgICAgICBpbnQgdSwgdjsgY2luID4+IHUgPj4gdjsKICAgICAgICBhW3VdLnBiKHYpOwogICAgfQogICAgbG9hZCgpOwogICAgLy9kZWJ1ZygpOwogICAgcHJvY2VzcygpOwogICAgY291dCA8PCByZXMuc2l6ZSgpIDw8IGVuZGw7CiAgICBmb3IocGlpIHggOiByZXMpY291dCA8PCByZXBbeC5maV0gPDwgIiAiIDw8IHJlcFt4LnNlXSA8PCBlbmRsOwogICAgcmV0dXJuIDA7Cn0KLyoKNyA4CjEgMgoyIDMKMyAxCjEgNAozIDQKNSA2CjYgNwo1IDcKKi8KIA==