Cod sursa(job #2421133)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 14 mai 2019 12:40:35
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include<cstdio>
#include<list>
#include<algorithm>
using namespace std;
#define N 100001
#define M 15000000
int n,m,i,j,v,x,y,s[N*5],e=-1,t;
list<int> l[N];
char r[M];
inline int A()
{
  	int s=0;
  	for(e++;r[e]>47;e++)
  		s=s*10+r[e]-48;
  	return s;
}
inline void S(int x)
{
    int i,d=x>99999?6:x>9999?5:x>999?4:x>99?3:x>9?2:1;
    for(i=d-1;i>=0;x/=10,i--)
        r[t+i]=x%10+48;
    r[t+d]=32,t+=d+1;
}
int main()
{
    freopen("ciclueuler.in","r",stdin),freopen("ciclueuler.out","w",stdout),fread(r,1,M,stdin),n=A(),m=A();
    while(m--)
        x=A(),y=A(),l[x].push_back(y),l[y].push_back(x);
    for(i=1;i<=n;++i)
        if(l[i].size()%2)
        {
            printf("-1");
            return 0;
        }
    for(v=s[1]=1;v;)
    {
        for(x=s[v];!l[x].empty();)
            y=l[x].front(),l[x].pop_front(),l[y].erase(find(l[y].begin(),l[y].end(),x)),s[++v]=x=y;
        S(s[v--]);
    }
    fwrite(r,1,t,stdout);
}