Pagini recente » Cod sursa (job #2817066) | Cod sursa (job #2768466) | Cod sursa (job #696004) | Cod sursa (job #1695840) | Cod sursa (job #471264)
Cod sursa(job #471264)
#include<fstream>
#include<list>
#include<iostream>
#define NMAX 100005
using namespace std;
list<int> a[NMAX];
typedef list<int>::iterator ITL;
int viz[NMAX],tata[NMAX],fii[NMAX],l1[NMAX],l2[NMAX],L[NMAX];
int n,m,i,x,y,k,mx;
ifstream f("mesaj4.in");
ofstream g("mesaj4.out");
void DFS(int nod, int ta)
{
int i;
ITL it;
viz[nod]=1;
tata[nod]=ta;
for (it=a[nod].begin();it!=a[nod].end();it++)
if (viz[*it]==0)
{
DFS(*it,nod);
fii[nod]++;
}
}
bool posibil(int n)
{
int i;
for (i=1;i<=n;i++)
if(viz[i]==0) return false;
return true;
}
void cauta(int &nr)
{
for (i=2;i<=mx;i++)
if (fii[i]==0)
{
nr++;
L[nr]=i;
}
}
void afiseaza()
{
ITL it;
mx=n;
int nr=0;
do
{
nr=0;
cauta(nr);
mx=-100;
if (nr>0)
for (i=1;i<=nr;i++)
{
k++;
fii[L[i]]=-1;
l1[k]=L[i];
l2[k]=tata[L[i]];
g<<l1[k]<<" "<<l2[k]<<"\n";
fii[tata[L[i]]]--;
if (fii[tata[L[i]]]==0 && tata[L[i]]>mx) mx=tata[L[i]];
}
}while(nr>0);
for (i=k;i>0;i--)
g<<l2[i]<<" "<<l1[i]<<"\n";
}
int main(){
f>>n>>m;
for (i=1;i<=m;++i)
{
f>>x>>y;
a[x].push_back(y);
a[y].push_back(x);
}
DFS(1,-2);
if (posibil(n)==false) g<<"-1\n";
else
{
g<<2*n-2<<"\n";
afiseaza();
}
f.close();
g.close();
return 0;
}