#include <iostream>
#include <cstdio>
#include <vector>
#include <cstring>
#include <queue>
using namespace std;
const int maxn = 16100;
struct node {
int v,next;
} edge[41000];
int head[maxn],sta[maxn],vis[maxn];
int id,top,n;
void add_edge(int u,int v){
edge[id].v = v;edge[id].next = head[u];head[u] = id++;
}
int dfs(int u){
if( vis[u^1] )return 0;
if( vis[u])return 1; vis[u] = 1;
sta[top++] = u;
for(int id = head[u]; id != -1; id = edge[id].next)
if(!dfs(edge[id].v))return 0;
return 1;
}
int slove(){
memset(vis,0,sizeof(vis)); for(int v = 0; v < n*2; v += 2){
if( vis[v] || vis[v^1])continue;
top = 0;
if(!dfs(v)){
while(top)vis[sta[--top]] = 0;
if( !dfs(v^1))return 0;
}
}
return 1;
}
int main()
{
int m;
int u,v;
while(~scanf("%d%d",&n,&m)) {
memset(head,-1,sizeof(head));
id = 0;
for(int i = 0; i < m; i ++) {
scanf("%d%d",&u,&v);
u--;v--;
add_edge(u,v^1);
add_edge(v,u^1);
}
if( !slove())puts("NIE");
else {
for(int i = 0; i < n*2; i+= 2){
printf("%d\n",(vis[i]?i:i^1) + 1);
}
}
}
return 0;
}

最新文章

  1. Microsoft QAS架接项目
  2. jQuery获取多种input值的方法
  3. Ubuntu16.04+Tensorlow+caffe+opencv3.1+theano部署
  4. C++ Pirmer : 第十五章 : 面向对象程序设计之基类和派生的定义、类型转换与继承与虚函数
  5. Linux 删除文件中某一行的方法
  6. h5上滑刷新(分页)
  7. dede顶级栏目直接显示内容
  8. python 的 class
  9. mac上安装port
  10. shell 块注释
  11. 算法分析-动态规划(cut_rod)
  12. iOS 发布证书提示 此证书的签发者无效 解决办法
  13. 个人作业2:QQ音乐APP案例分析
  14. ajax实现用户登陆,退出,java做后端
  15. 解决 Files 的值&quot;&lt;&lt;&lt;&lt;&lt;&lt;&lt; HEAD&quot;无效。路径中具有非法字符
  16. 谈一谈Elasticsearch的集群部署
  17. srs2.0安装问题
  18. WPF学习笔记(3):ListView根据内容自动调整列宽
  19. python + Jenkins + requests 数据驱动接口测试 环境部署
  20. Xamarin iOS教程之添加和定制视图

热门文章

  1. js常用事件列表
  2. 通过自制yum源离线安装ansible
  3. java高并发系列 - 第22天:java中底层工具类Unsafe,高手必须要了解
  4. Unity经典游戏教程之:是男人就下100层
  5. 【错误】【vscode】&quot;&#39;#&#39; not expected here&quot;
  6. JVM系列(3)- Java VisualVM使用
  7. cinder支持nfs快照
  8. ibatis 核心原理解析
  9. JAVA基础知识(八)值传递与引用传递
  10. TI MSP430工程配置及2019年电赛A题编程示例(使用430 F5529)