Pagini recente » Cod sursa (job #705019) | Cod sursa (job #1237048) | Cod sursa (job #2827168) | Cod sursa (job #1009473) | Cod sursa (job #1642446)
#include <cstdio>
#include <vector>
#include <bitset>
const int DIM = 1 << 17;
using namespace std;
int N, M, X, Y, nr;
vector <int> Edge[DIM], NewEdge[DIM]; bitset <DIM> Marked;
void DFS1( int node, int &nr ) {
Marked[node] = 1; nr ++;
vector <int> :: iterator it;
for( it = Edge[node].begin(); it != Edge[node].end(); it ++ ) {
int next_node = *it;
if( !Marked[next_node] ) {
NewEdge[node].push_back( next_node );
DFS1( next_node, nr );
}
}
return;
}
void DFS2( int node ) {
vector <int> :: iterator it;
for( it = NewEdge[node].begin(); it != NewEdge[node].end(); it ++ ) {
int next_node = *it;
DFS2( next_node );
printf( "%d %d\n", next_node, node );
}
return;
}
void DFS3( int node ) {
vector <int> :: iterator it;
for( it = NewEdge[node].begin(); it != NewEdge[node].end(); it ++ ) {
int next_node = *it;
printf( "%d %d\n", node, next_node );
DFS3( next_node );
}
return;
}
int main() {
freopen( "mesaj4.in" , "r", stdin );
freopen( "mesaj4.out", "w", stdout );
scanf( "%d %d", &N, &M );
for( int i = 1; i <= M; i ++ ) {
scanf( "%d %d", &X, &Y );
Edge[X].push_back( Y );
Edge[Y].push_back( X );
}
DFS1( 1, nr );
if( nr < N )
printf( "-1\n" );
else {
printf( "%d\n", N * 2 - 2 );
DFS2( 1 );
DFS3( 1 );
}
return 0;
}