#include<iostream>#include<cstdio>#include<vector>
using namespace std;int n, m, cnt =0;
vector<vector<int>> edge;
vector<bool> visit;voiddfs(int v){
cnt++;
visit[v]= true;for(int i =0; i <int(edge[v].size()); i++)if(visit[edge[v][i]]== false)dfs(edge[v][i]);}intmain(){scanf("%d%d",&n,&m);
edge.resize(n+1);
visit.resize(n+1);int a, b;for(int i =0; i < m; i++){scanf("%d%d",&a,&b);
edge[a].push_back(b);
edge[b].push_back(a);}int even =0;for(int i =1; i <= n; i++){if(i !=1)printf(" ");printf("%d",int(edge[i].size()));if(edge[i].size()%2==0) even++;}printf("\n");dfs(1);if(even == n && cnt == n)printf("Eulerian\n");elseif(even == n-2&& cnt == n)printf("Semi-Eulerian\n");elseprintf("Non-Eulerian\n");return0;}