Pagini recente » Cod sursa (job #535405) | Cod sursa (job #3232426) | Cod sursa (job #108854) | Cod sursa (job #190998) | Cod sursa (job #761147)
Cod sursa(job #761147)
#include<cstdio>
#include<cstdlib>
#include<vector>
using namespace std;
const int MAXN = 100010;
vector <int> graf[MAXN];
pair <int, int> sol[MAXN];
bool viz[MAXN];
int M, N, lim;
char *buffer;
void DFS(int nod)
{
vector <int> :: iterator it;
viz[nod] = 1;
for(it = graf[nod].begin(); it != graf[nod].end(); ++it)
if(!viz[*it]){
++lim;
sol[lim].first = nod;
sol[lim].second = (*it);
DFS(*it);
}
}
/*void DFS(int nod)
{
int i;
viz[nod] = 1;
for(i = 0; i < grad[nod].size(); ++i)
if(!viz[ grad[nod][i] ]){
++lim;
sol[lim].first = nod;
sol[lim].second = graf[nod][i];
DFS(graf[nod][i]);
}
}*/
void read(int &x)
{
while(*buffer < '0' || *buffer > '9')
++buffer;
x = 0;
while(*buffer >= '0' && *buffer <= '9'){
x = (x * 10) + (*buffer - '0');
++buffer;
}
}
int main()
{
int fs, i, nod1, nod2;
freopen("mesaj4.in", "r", stdin);
freopen("mesaj4.out", "w", stdout);
fseek(stdin, 0, SEEK_END);
fs = ftell(stdin);
buffer = (char*) malloc(fs);
rewind(stdin);
fread(buffer, 1, fs, stdin);
read(N), read(M);
while(M--){
read(nod1), read(nod2);
graf[nod1].push_back(nod2);
graf[nod2].push_back(nod1);
}
DFS(1);
if(lim != (N - 1)){
printf("-1");
return 0;
}
printf("%d\n", (N << 1) - 2);
for(i = lim; i; --i)
printf("%d %d\n", sol[i].second, sol[i].first);
for(i = 1; i <= lim; ++i)
printf("%d %d\n", sol[i].first, sol[i].second);
return 0;
}