#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+IGRpbiwgZG91dDsKdmVjdG9yPHBpaT4gcmVzOwppbnQgaW5bTl0sIG91dFtOXTsKdmVjdG9yPGludD4gZGFnW05dOwoKdm9pZCBERlMoaW50IHUpewogICAgbnVtW3VdID0gbG93W3VdID0gKyt0aW1lREZTOwogICAgc3QucHVzaCh1KTsKICAgIG9uW3VdID0gdHJ1ZTsKICAgIGZvcihpbnQgdiA6IGFbdV0pewogICAgICAgIGlmKCFudW1bdl0pewogICAgICAgICAgICBERlModik7CiAgICAgICAgICAgIGxvd1t1XSA9IG1pbihsb3dbdV0sIGxvd1t2XSk7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYob25bdl0pbG93W3VdID0gbWluKGxvd1t1XSwgbnVtW3ZdKTsKICAgIH0KICAgIGlmKGxvd1t1XSA9PSBudW1bdV0pewogICAgICAgICsrc2NjX2NudDsKICAgICAgICByZXBbc2NjX2NudF0gPSB1OwogICAgICAgIHdoaWxlKHRydWUpewogICAgICAgICAgICBpbnQgdiA9IHN0LnRvcCgpOwogICAgICAgICAgICBzdC5wb3AoKTsKICAgICAgICAgICAgb25bdl0gPSAwOwogICAgICAgICAgICBpZFt2XSA9IHNjY19jbnQ7CiAgICAgICAgICAgIGlmKHUgPT0gdikgYnJlYWs7CiAgICAgICAgfQogICAgfQp9Cgp2b2lkIEJGUyhpbnQgc3QpewogICAgcXVldWU8aW50PiBxOwogICAgcS5wdXNoKHN0KTsKICAgIGNoZWNrW3N0XSA9IHRydWU7CiAgICB2ZWN0b3I8aW50PiBkMSwgZDI7CiAgICB3aGlsZSghcS5lbXB0eSgpKXsKICAgICAgICBpbnQgdSA9IHEuZnJvbnQoKTsgcS5wb3AoKTsKICAgICAgICBpZihpblt1XSA9PSAwKWQxLnBiKHUpOwogICAgICAgIGlmKG91dFt1XSA9PSAwKWQyLnBiKHUpOwogICAgICAgIGZvcihpbnQgdiA6IGRhZ1t1XSlpZighY2hlY2tbdl0pewogICAgICAgICAgICBxLnB1c2godik7CiAgICAgICAgICAgIGNoZWNrW3ZdID0gdHJ1ZTsKICAgICAgICB9CiAgICB9CiAgICBkaW4ucGIoZDEpOwogICAgZG91dC5wYihkMik7Cn0Kdm9pZCBwcm9jZXNzKCl7CiAgICBpZihzY2NfY250ID09IDEpcmV0dXJuOwogICAgdmVjdG9yPGludD4gcmVtYWluX2luLCByZW1haW5fb3V0OwogICAgaW50IHRlbXAxID0gLTEsIHRlbXAyID0gLTE7CiAgICBGT0QoaSwwLGRpbi5zaXplKCkpewogICAgICAgIGludCBzID0gZGluW2ldLmJhY2soKTtkaW5baV0ucG9wX2JhY2soKTsKICAgICAgICBpbnQgdCA9IGRvdXRbaV0uYmFjaygpO2RvdXRbaV0ucG9wX2JhY2soKTsKICAgICAgICBpZihpID09IDApdGVtcDEgPSBzOwogICAgICAgIGVsc2UgcmVzLnBiKHt0ZW1wMiwgc30pOwogICAgICAgIHRlbXAyID0gdDsKICAgICAgICBmb3IoaW50IHggOiBkaW5baV0pcmVtYWluX2luLnBiKHgpOwogICAgICAgIGZvcihpbnQgeCA6IGRvdXRbaV0pcmVtYWluX291dC5wYih4KTsKICAgIH0KICAgIHJlcy5wYih7dGVtcDIsIHRlbXAxfSk7CiAgICBGT0QoaSwwLG1heChyZW1haW5faW4uc2l6ZSgpLCByZW1haW5fb3V0LnNpemUoKSkpewogICAgICAgIGludCB1ID0gKGkgPCAoaW50KXJlbWFpbl9vdXQuc2l6ZSgpKSA/IHJlbWFpbl9vdXRbaV0gOiB0ZW1wMjsKICAgICAgICBpbnQgdiA9IChpIDwgKGludClyZW1haW5faW4uc2l6ZSgpKSA/IHJlbWFpbl9pbltpXSA6IHRlbXAxOwogICAgICAgIHJlcy5wYih7dSwgdn0pOwogICAgfQp9CnZvaWQgbG9hZCgpewogICAgRk9SKGksMSxuKWlmKCFudW1baV0pREZTKGkpOwogICAgRk9SKHUsMSxuKWZvcihpbnQgdiA6IGFbdV0paWYoaWRbdV0gIT0gaWRbdl0pewogICAgICAgIGluW2lkW3ZdXSsrOwogICAgICAgIG91dFtpZFt1XV0rKzsKICAgICAgICBkYWdbaWRbdV1dLnBiKGlkW3ZdKTsKICAgICAgICBkYWdbaWRbdl1dLnBiKGlkW3VdKTsKICAgIH0KCiAgICBGT1IoaSwxLHNjY19jbnQpewogICAgICAgIHNvcnQoZGFnW2ldLmJlZ2luKCksIGRhZ1tpXS5lbmQoKSk7CiAgICAgICAgZGFnW2ldLmVyYXNlKHVuaXF1ZShkYWdbaV0uYmVnaW4oKSwgZGFnW2ldLmVuZCgpKSwgZGFnW2ldLmVuZCgpKTsKICAgIH0KCiAgICBGT1IoaSwxLHNjY19jbnQpaWYoIWNoZWNrW2ldKUJGUyhpKTsKfQoKdm9pZCBkZWJ1ZygpewogICAgY291dCA8PCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iIDw8IGVuZGw7CiAgICBGT1IoaSwxLG4pY291dCA8PCBpIDw8ICIgOiAiIDw8IGlkW2ldIDw8IGVuZGw7CiAgICBjb3V0IDw8IGVuZGwgPDwgZW5kbDsKICAgIGNvdXQgPDwgImRpbiA6ICI7CiAgICBGT0QoaSwwLGRpbi5zaXplKCkpZm9yKGludCB1IDogZGluW2ldKWNvdXQgPDwgdSA8PCAiKCIgPDwgcmVwW3VdIDw8ICIpICAiOwogICAgY291dCA8PCBlbmRsOwogICAgY291dCA8PCAiZG91dCA6ICI7CiAgICBGT0QoaSwwLGRvdXQuc2l6ZSgpKWZvcihpbnQgdSA6IGRvdXRbaV0pY291dCA8PCB1IDw8ICIoIiA8PCByZXBbdV0gPDwgIikgICI7CiAgICBjb3V0IDw8IGVuZGwgPDwgZW5kbDsKICAgIGNvdXQgPDwgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA8PCBlbmRsOwp9CgppbnQgbWFpbigpewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsgY2luLnRpZSgwKTsgY291dC50aWUoMCk7CiAgICBjaW4gPj4gbiA+PiBtOwogICAgRk9SKGksMSxtKXsKICAgICAgICBpbnQgdSwgdjsgY2luID4+IHUgPj4gdjsKICAgICAgICBhW3VdLnBiKHYpOwogICAgfQogICAgbG9hZCgpOwogICAgLy9kZWJ1ZygpOwogICAgcHJvY2VzcygpOwogICAgY291dCA8PCByZXMuc2l6ZSgpIDw8IGVuZGw7CiAgICBmb3IocGlpIHggOiByZXMpY291dCA8PCByZXBbeC5maV0gPDwgIiAiIDw8IHJlcFt4LnNlXSA8PCBlbmRsOwogICAgcmV0dXJuIDA7Cn0KLyoKNyA4CjEgMgoyIDMKMyAxCjEgNAozIDQKNSA2CjYgNwo1IDcKKi8K