Pagini recente » Statistici Vamanu Petru Gabriel (petrisorvmy) | Cod sursa (job #1443343) | Cod sursa (job #2195111) | Cod sursa (job #2766189) | Cod sursa (job #471260)
Cod sursa(job #471260)
#include<fstream>
#include<list>
#include<iostream>
#define NMAX 100005
using namespace std;
list<int> a[NMAX],L;
typedef list<int>::iterator ITL;
int viz[NMAX],tata[NMAX],fii[NMAX],l1[NMAX],l2[NMAX];
int n,m,i,x,y,k;
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<=n;i++)
if (fii[i]==0)
{
L.push_back(i);
nr++;
}
}
void afiseaza()
{
ITL it;
int nr=0;
do
{
nr=0;
cauta(nr);
if (nr>0)
{
for (it=L.begin();it!=L.end();it++)
{
k++;
fii[*it]=-1;
l1[k]=*it;
l2[k]=tata[*it];
g<<l1[k]<<" "<<l2[k]<<"\n";
fii[tata[*it]]--;
}
L.clear();
}
}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;
}