Pagini recente » Cod sursa (job #679719) | Cod sursa (job #655867) | Cod sursa (job #1202012) | Cod sursa (job #2086537) | Cod sursa (job #1860364)
#include <cstdio>
#include <cstring>
#define MAXN 100000
#define MAXM 100000
int ut[MAXN], nd[2 * MAXM], nxt[2 * MAXM], dr;
int r1[MAXN], r2[MAXN], d;
char tr[MAXN];
inline void add(int a, int b){
nd[dr] = b;
nxt[dr] = ut[a];
ut[a] = dr;
dr++;
}
void dfs(int x, int tt){
tr[x] = 1;
int poz;
poz = ut[x];
while(poz != -1){
if(!tr[nd[poz]])
dfs(nd[poz], x);
poz = nxt[poz];
}
r1[d] = x;
r2[d++] = tt;
}
int main(){
FILE *in = fopen("mesaj4.in", "r");
int n, m, i, a, b;
fscanf(in, "%d%d", &n, &m);
memset(ut, -1, sizeof ut);
for(i = 0; i < m; i++){
fscanf(in, "%d%d", &a, &b);
add(a - 1, b - 1);
add(b - 1, a - 1);
}
fclose(in);
dfs(0, -1);
FILE *out = fopen("mesaj4.out", "w");
if(d != n)
fprintf(out, "-1");
else{
fprintf(out, "%d\n", 2 * n - 2);
for(i = 0; i < d - 1; i++)
fprintf(out, "%d %d\n", r1[i] + 1, r2[i] + 1);
for(i = d - 2; i >= 0; i--)
fprintf(out, "%d %d\n", r1[i] + 1, r2[i] + 1);
}
fclose(out);
return 0;
}