Cod sursa(job #467742)
#include <cstdio>
#define DN 100010
int a[DN],b[DN];
bool viz[DN];
struct nod {
int x;
nod *urm;
} *v[DN];
void dfs(int sursa) {
nod *p;
if(viz[sursa]) return;
viz[sursa]=true;
for(p=v[sursa]; p!=NULL; p=p->urm)
if(!viz[p->x]) {
dfs(p->x);
a[++a[0]]=p->x;
b[++b[0]]=sursa;
}
}
void adaugare(int x,int y) {
nod *p;
p=new nod;
p->x=y;
p->urm=v[x];
v[x]=p;
}
int main()
{
freopen("mesaj4.in","r",stdin);
freopen("mesaj4.out","w",stdout);
int n,m,i,x,y;
scanf("%d %d",&n,&m);
for(i=1; i<=m; i++) {
scanf("%d %d",&x,&y);
adaugare(x,y);
adaugare(y,x);
}
dfs(1);
if(a[0]<n-1) { printf("-1\n"); return 0; }
printf("%d\n", n*2-2);
for(i=1; i<n; ++i)
printf("%d %d\n", a[i], b[i]);
for(i=n-1; i; --i)
printf("%d %d\n", b[i], a[i]);
return 0;
}