#include<bits/stdc++.h>
//#define T(x) 2*x
//#define F(x) 2*x-1
using namespace std;
vector<int> son[32005];
int m,n,dfn[32005],tot,cnt,low[32005],res[32005];
bool inst[32005];
stack<int> s;
int T(int x){
return 2*x;
}
int F(int x){
return 2*x-1;
}
void Tarjan(int u){
low[u]=dfn[u]=++tot;
s.push(u);
inst[u]=1;
for(int v,i=0;i<son[u].size();i++){
v=son[u][i];
if(dfn[v]==0){
Tarjan(v);
low[u]=min(low[u],low[v]);
}else if(inst[v]){
low[u]=min(low[u],dfn[v]);
}
}
if(dfn[u]==low[u]){
cnt++;
int temp;
do{
temp=s.top();
res[temp]=cnt;
s.pop();
inst[temp]=0;
}while(temp!=u);
}
}
void lk(int a,int b){
son[a].push_back(b);
son[b].push_back(a);
}
int fr(int x){
if(x%2==0) return x-1;
return x+1;
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>m;
for(int i=1,a,b;i<=m;i++){
cin>>a>>b;
lk(T(a),F(b));
lk(T(b),F(a));
}
for(int i=1;i<=n;i++){
lk(T(2*i-1),F(2*i));
lk(F(2*i-1),T(2*i));
lk(T(2*i),F(2*i-1));
lk(F(2*i),T(2*i-1));
}
for(int i=1;i<=4*n;i++){
if(!dfn[i]) Tarjan(i);
}
for(int i=1;i<=n;i++){
if(res[T(i*2-1)]==res[T(i*2)]||res[F(i*2-1)]==res[F(i*2)]){
cout<<"NIE";
return 0;
}
}
for(int i=1;i<=n;i++){
int p=2*i;
if(res[T(p)]<res[F(p)]){
cout<<p<<'\n';
}else{
cout<<fr(p)<<'\n';
}
}
return 0;
}
WA28pts,怎么都找不出问题