Pagini recente » Cod sursa (job #1724101) | Cod sursa (job #1882679) | Cod sursa (job #1366261) | Cod sursa (job #390060) | Cod sursa (job #2274900)
#include <stdio.h>
#include <vector>
#include <algorithm>
#include <math.h>
#include <string.h>
using namespace std;
#define MAXN 100005
int n, m;
vector<int> g[MAXN];
bool v[MAXN];
vector<pair<int, int>> sol;
void dfsCon(int x) {
if (v[x]) {
return;
}
v[x] = true;
for (auto y : g[x]) {
dfsCon(y);
}
}
bool iSConnected() {
dfsCon(1);
for (int i = 1; i <= n; ++i) {
if (!v[i]) {
return false;
}
}
return true;
}
void dfsAquire(int x, int p) {
bool canVisit = false;
v[x] = true;
for (auto y : g[x]) {
if (!v[y]) {
dfsAquire(y, x);
}
}
if (p != 0) {
sol.push_back({ x,p });
}
}
int main() {
freopen("mesaj4.in", "r", stdin);
freopen("mesaj4.out", "w", stdout);
scanf("%d %d", &n, &m);
for (int i = 0; i < m; ++i) {
int x, y;
scanf("%d %d", &x, &y);
g[x].push_back(y);
g[y].push_back(x);
}
if (!iSConnected()) {
printf("-1");
return 0;
}
memset(v, 0, sizeof(v));
dfsAquire(1, 0);
printf("%d\n", (n - 1) * 2);
for (auto x : sol) {
printf("%d %d\n", x.first, x.second);
}
for (int i = sol.size() - 1; i >= 0; i--) {
printf("%d %d\n", sol[i].second, sol[i].first);
}
return 0;
}