Pagini recente » Cod sursa (job #1346703) | Cod sursa (job #1839571) | Cod sursa (job #1460302) | Cod sursa (job #2658898) | Cod sursa (job #1888398)
#include <iostream>
#include <cstdio>
#include <vector>
#define MAXN 100050
using namespace std;
int n, m;
vector<int> graf[MAXN];
int parent[MAXN];
vector<int> arb[MAXN];
void read()
{
int x, y;
scanf("%d %d", &n, &m);
for (int i = 1; i <= m; i++) {
scanf("%d %d", &x, &y);
graf[x].push_back(y);
graf[y].push_back(x);
}
}
void dfs(int nod)
{
for (int y : graf[nod])
{
if (parent[y] != 0) continue;
parent[y] = nod;
arb[nod].push_back(y);
dfs(y);
}
}
int connected()
{
for (int i = 1; i <= n; i++)
if (parent[i] == 0)
return 0;
return 1;
}
void downTopSolve(int nod)
{
for (int y : arb[nod])
downTopSolve(y);
if (parent[nod] != -1)
printf("%d %d\n", nod, parent[nod]);
}
void topDownSolve(int nod)
{
for (int y : arb[nod])
printf("%d %d\n", nod, y);
for (int y : arb[nod])
topDownSolve(y);
}
int main()
{
freopen("mesaj4.in", "r", stdin);
freopen("mesaj4.out", "w", stdout);
read();
parent[1] = -1;
dfs(1);
if (!connected())
printf("-1");
else {
printf("%d\n", 2*(n-1));
downTopSolve(1);
topDownSolve(1);
}
return 0;
}