#include<bits/stdc++.h>
using namespace std;
#define v1 v[x][q]
const long long MAXN=100007,MAXM=1000007;
vector<int> ezik[MAXN];
vector<pair<int,int>> anss;
vector<int> v[MAXN];
int br=0,st=0;
bool b[MAXN];
bool c[MAXN];
void dfs(int x)
{
    b[x]=1;
    br++;
    int tb=0;
    for (int q=0;q<v[x].size();q++)
    {
        if (!b[v1])
        {
            tb++;
            dfs(v1);
        }
    }
    if (tb==0) st=x;
}
void dfs1(int x, int zz)
{
    c[x]=1;
    for (int q=0;q<v[x].size();q++)
    {
        if (!c[v1])
        {
            if (zz==1) anss.push_back(make_pair(x,v1));
            dfs1(v1,1-zz);
        }
    }
}
int main()
{
    int n,m;
    cin>>n>>m;
    for (int q=0;q<m;q++)
    {
        int a12;
        cin>>a12;
        ezik[a12].push_back(q);
        cin>>a12;
        ezik[a12].push_back(q);
    }
    for (int q=1;q<=n;q++)
    {
        if (ezik[q].size()==2)
        {
            v[ezik[q][0]].push_back(ezik[q][1]);
            v[ezik[q][1]].push_back(ezik[q][0]);
        }
    }
    int ans=0;
    for (int q=0;q<m;q++)
    {
        if (!b[q])
        {
            br=0;
            dfs(q);
            ans+=br/2;
            //lets gen answers;
            dfs1(st,1);
        }
    }
    cout<<ans<<"\n";
    for (int q=0;q<anss.size();q++)
    {
        cout<<anss[q].first+1<<" "<<anss[q].second+1<<"\n";
    }
}
