Cod sursa(job #528203)
#include <cstdio>
#include <vector>
#include <bitset>
#define maxn 100010
using namespace std;
int n, m;
bitset <maxn> viz;
vector <int> G[maxn];
vector <pair <int, int> > sol;
void dfs (int node)
{
viz[node] = 1;
for (vector <int> :: iterator it = G[node].begin (); it != G[node].end (); it++)
if (!viz[*it]) {
sol.push_back (make_pair (node, *it));
dfs (*it);
}
}
int main ()
{
freopen ("mesaj4.in", "r", stdin);
freopen ("mesaj4.out", "w", stdout);
int i, x, y;
scanf ("%d %d\n", &n, &m);
while (m--) {
scanf ("%d%d\n", &x, &y);
G[x].push_back (y);
G[y].push_back (x);
}
dfs (1);
for (i = 1; i <= n; i++)
if (!viz[i]) {
printf ("-1\n");
return 0;
}
printf ("%d\n", 2 * (n - 1));
for (i = sol.size () - 1; i >= 0; i--)
printf ("%d %d\n", sol[i].second, sol[i].first);
for (i = 0; i < sol.size (); i++)
printf ("%d %d\n", sol[i].first, sol[i].second);
return 0;
}