#include <iostream>
#include <vector>
#define nmax 1005
using namespace std;

vector <int> v[nmax];
vector <pair <int, int> > sol;
int n, m, x, y, pre[nmax];
bool seen[nmax];

void dfs(int x) {
    seen[x] = true;

    for(int i=0; i<int(v[x].size()); i++) {
        if(pre[x] == v[x][i]) sol.push_back(make_pair(min(x, v[x][i]), max(x, v[x][i])));
        if(!seen[v[x][i]]) {
            pre[v[x][i]] = x;
            dfs(v[x][i]);
        }
    }
}

int main() {
    cin>>n>>m;
    for(int i=1; i<=m; i++) {
        cin>>x>>y;
        v[x].push_back(y);
    }

    for(int i=1; i<=n; i++)
        if(!seen[i]) dfs(i);

    cout<<sol.size()<<"\n";
    for(int i=0; i<int(sol.size()); i++)
        cout<<sol[i].first<<" "<<sol[i].second<<"\n";

    return 0;
}