#include<iostream>
#include<cstring>
using namespace std;
const int maxn=100010;
struct node{
int to,next;
}edge[maxn];
int head[maxn],tot=0;
void init(){
tot=0;
memset(head,-1,sizeof(head));
}
void add(int u,int v){
edge[tot].to=v;
edge[tot].next=head[u];
head[u]=tot++;
}
int vis[20010];
int sta[maxn],top;
int dfs(int u){
if(vis[u^1])return 0;
if(vis[u])return 1;
vis[u]=1;sta[top++]=u;
for(int i=head[u];i!=-1;i=edge[i].next){
if(!dfs(edge[i].to))
return 0;
return 1;
}
}
int twosat(int n){
memset(vis,0,sizeof(vis));
for(int i=0;i<n;i+=2){
if(vis[i]||vis[i^1])continue;
top=0;
if(!dfs(i)){
while(top)vis[sta[--top]]=0;
if(!dfs(i^1))return 0;
}
}
return 1;
}
int main(){
int n,m;
while(scanf("%d%d",&n,&m)==2){
init();
while(m--){
int u,v;
scanf("%d%d",&u,&v);
u--;v--;
add(u,v^1);
add(v,u^1);
}
if(twosat(2*n)){
for(int i=0;i<2*n;i++){
if(vis[i]){
printf("%d\n",i+1);
}
}
}
else{
printf("NIE\n");
}
}
return 0;
}