#include<bits/stdc++.h>
using namespace std;
#define v1 v[x][q]
const long long MAXN=100007,MAXM=1000007;
vector<pair<int, int>> anss;
int ez1[MAXM],ez2[MAXM];
bool same(int x, int y)
{
    if (ez1[x]==ez1[y]) return true;
    if (ez2[x]==ez1[y]) return true;
    if (ez2[x]==ez2[y]) return true;
    if (ez1[x]==ez2[y]) return true;
    return false;
}
int br=0,st=0;
bool b[MAXM];
bool c[MAXM];
int ut=0;
int nach[MAXM];
int reb[MAXM*4],pr[MAXM*4];
void dfs(int x)
{
    b[x]=1;
    br++;
    int ss=nach[x];
    int tt=0;
    while (ss>=0)
    {
        if (!b[reb[ss]])
        {
            dfs(reb[ss]);
            tt++;
        }
        ss=pr[ss];
    }
    if (tt==0) st=x;
}
void dfs1(int x, int zz)
{
    c[x]=1;
    int ss=nach[x];
    int tt=0;
    while (ss>=0)
    {
        if (!c[reb[ss]])
        {
            if (tt==0 && zz==1) anss.push_back(make_pair(x,reb[ss]));
            if (tt==0 || zz==0) dfs1(reb[ss],1-zz);
            else dfs1(reb[ss],1);
            tt++;
        }
        ss=pr[ss];
    }
}
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    int n,m;
    cin>>n>>m;
    for (int q=0;q<m;q++)
    {
        nach[q]=-1;
        int a12;
        cin>>ez1[q];
        cin>>ez2[q];
    }
    for (int q=0;q<m;q++)
    {
        for (int w=q+1;w<m;w++)
        {
            if (same(q,w))
            {
                pr[ut]=nach[q];
                reb[ut]=w;
                nach[q]=ut;
                ut++;
                pr[ut]=nach[w];
                reb[ut]=q;
                nach[w]=ut;
                ut++;
            }
        }
    }
    int ans=0;
    for (int q=0;q<m;q++)
    {
        if (!b[q])
        {
            br=0;
            dfs(q);
            ans+=br/2;
            dfs1(st,1);
        }
    }
    cout<<ans<<"\n";
    for (int q=0;q<anss.size();q++)
    {
        cout<<anss[q].first+1<<" "<<anss[q].second+1<<"\n";
    }
}
