Pagini recente » Cod sursa (job #965924) | Cod sursa (job #2406269) | Cod sursa (job #878403) | Cod sursa (job #839288) | Cod sursa (job #1936454)
# include <fstream>
# include <vector>
# include <deque>
# define DIM1 100010
# define DIM2 500050
# define vecin first
# define poz second
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
vector<pair<int,int> > Lista[DIM1];
deque<int> q;
int f[DIM2],Marcat[DIM1],d[DIM1],n,m,i,x,y;
void dfs(int nc){
Marcat[nc]=1;
for(int i=0;i<Lista[nc].size();i++){
int nv=Lista[nc][i].vecin;
if(Marcat[nv]==0)
dfs(nv);
}
}
int main () {
fin>>n>>m;
for(i=1;i<=m;i++){
fin>>x>>y;
Lista[x].push_back(make_pair(y,i));
Lista[y].push_back(make_pair(x,i));
d[x]++;
d[y]++;
}
for(i=1;i<=n;i++)
if(d[i]){
dfs(i);
break;
}
for(i=1;i<=n;i++)
if(d[i]%2==1||(d[i]!=0&&Marcat[i]==0)){
fout<<"-1\n";
return 0;
}
q.push_back(1);
while(!q.empty()){
if(d[q.back()]==0){
if(q.back()!=1)
fout<<q.back()<<" ";
q.pop_back();
continue;
}
int nc=q.back();
i=Lista[nc].size()-1;
while(f[Lista[nc][i].poz]==1){
Lista[nc].pop_back();
i--;
}
int nv=Lista[nc][i].vecin;
q.push_back(nv);
d[nc]--;
d[nv]--;
f[Lista[nc][i].poz]=1;
}
fout<<"1\n";
return 0;
}