#include <bits/stdc++.h>   #pragma comment(linker,  /stack:200000000 )   #pragma GCC optimize( Ofast )   #pragma target( sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native )   using namespace std;   long long read() {     long long x = 0, f = 1;     char c = getchar();     for (; !isdigit(c); c = getchar())       if (c ==  - ) f = -1;     for (; isdigit(c); c = getchar()) x = (x << 1) + (x << 3) + (c ^ 48);     return x * f;   }   void write(long long x) {     if (x < 0) x = -x, putchar( - );     if (x >= 10) write(x / 10);     putchar(x % 10 +  0 );   }   void writeln(long long x) {     write(x);     puts(  );   }   const int N = 500000;   int E[N], X[N], R[N], D[N];   int u[N], v[N];   bool b[N];   int i, m, n, t, w, x, y, S_E;   inline void A_E(int x, int y) {     S_E++, E[S_E] = y, X[S_E] = R[x], R[x] = S_E, D[x]++;     return;   }   inline int O_E(int x) { return ((x - 1) ^ 1) + 1; }   inline void dfs(int x) {     for (int i = R[x]; R[x] = X[i], i != 0; i = R[x])       if (!b[i]) {         b[i] = true, b[O_E(i)] = true;         dfs(E[i]);         w++, u[w] = x, v[w] = E[i];       }     return;   }   int main() {     n = read(), m = read();     for (i = 1; i <= m; i++) {       x = read(), y = read();       A_E(x, y), A_E(y, x);     }     for (i = 1; i <= n; i++)       if (D[i] & 1)         if (t)           m++, A_E(i, t), A_E(t, i), t = 0;         else           t = i;     if (m & 1) m++, A_E(1, 1), A_E(1, 1);     writeln(m);     dfs(1);     for (i = w; i > 0; i--)       if (!(i & 1))         printf( %d %d n , u[i], v[i]);       else         printf( %d %d n , v[i], u[i]);     return 0;   }   