One-Way Reform
time limit per test

2 seconds

memory limit per test

256 megabytes

input

standard input

output

standard output

There are n cities and m two-way roads in Berland, each road connects two cities. It is known that there is no more than one road connecting each pair of cities, and there is no road which connects the city with itself. It is possible that there is no way to get from one city to some other city using only these roads.

The road minister decided to make a reform in Berland and to orient all roads in the country, i.e. to make each road one-way. The minister wants to maximize the number of cities, for which the number of roads that begins in the city equals to the number of roads that ends in it.

Input

The first line contains a positive integer t (1 ≤ t ≤ 200) — the number of testsets in the input.

Each of the testsets is given in the following way. The first line contains two integers n and m (1 ≤ n ≤ 200, 0 ≤ m ≤ n·(n - 1) / 2) — the number of cities and the number of roads in Berland.

The next m lines contain the description of roads in Berland. Each line contains two integers u and v (1 ≤ u, v ≤ n) — the cities the corresponding road connects. It's guaranteed that there are no self-loops and multiple roads. It is possible that there is no way along roads between a pair of cities.

It is guaranteed that the total number of cities in all testset of input data doesn't exceed 200.

Pay attention that for hacks, you can only use tests consisting of one testset, so t should be equal to one.

Output

For each testset print the maximum number of such cities that the number of roads that begins in the city, is equal to the number of roads that ends in it.

In the next m lines print oriented roads. First print the number of the city where the road begins and then the number of the city where the road ends. If there are several answers, print any of them. It is allowed to print roads in each test in arbitrary order. Each road should be printed exactly once.

Example
input
2
5 5
2 1
4 5
2 3
1 3
3 5
7 2
3 7
4 2
output
3
1 3
3 5
5 4
3 2
2 1
3
2 4
3 7
分析:对于度数为奇数的节点,必然存在一条子欧拉路径,那么除去两个端点,其他的都是对答案有贡献的;
   然后对于子欧拉回路,每个节点都有贡献;
   为了防止重复计数,vis数组判断有没有访问过;
代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <climits>
#include <cstring>
#include <string>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <vector>
#include <list>
#define rep(i,m,n) for(i=m;i<=n;i++)
#define rsp(it,s) for(set<int>::iterator it=s.begin();it!=s.end();it++)
#define mod 1000000007
#define inf 0x3f3f3f3f
#define vi vector<int>
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define ll long long
#define pi acos(-1.0)
#define pii pair<int,int>
#define Lson L, mid, ls[rt]
#define Rson mid+1, R, rs[rt]
const int maxn=2e2+;
using namespace std;
ll gcd(ll p,ll q){return q==?p:gcd(q,p%q);}
ll qpow(ll p,ll q){ll f=;while(q){if(q&)f=f*p;p=p*p;q>>=;}return f;}
inline ll read()
{
ll x=;int f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
int n,m,k,t,now[maxn],du[maxn],cnt,ret;
bool c[maxn][maxn],vis[maxn];
vector<pii>ans;
void dfs(int p)
{
if(!vis[p])vis[p]=true,cnt++;
for(;now[p]<=n;now[p]++)
{
int q=now[p];
if(c[p][q])
{
ans.pb(mp(p,q));
--du[p],--du[q];
c[p][q]=c[q][p]=false;
dfs(q);
break;
}
}
}
int main()
{
int i,j;
scanf("%d",&t);
while(t--)
{
ans.clear();
ret=;
memset(now,,sizeof(now));
memset(vis,false,sizeof(vis));
scanf("%d%d",&n,&m);
while(m--)
{
scanf("%d%d",&j,&k);
du[j]++,du[k]++;
c[j][k]=c[k][j]=true;
}
for(i=;i<=n;i++)
{
if(du[i]&)
{
cnt=;
dfs(i);
ret+=cnt-;
}
}
for(i=;i<=n;i++)
{
if(du[i])
{
cnt=;
dfs(i);
ret+=cnt;
}
else if(!du[i]&&!vis[i])ret++;
}
printf("%d\n",ret);
for(pii x:ans)printf("%d %d\n",x.fi,x.se);
}
//system("Pause");
return ;
}

最新文章

  1. Generate Time Data(普通日期主数据)
  2. Struts2重定向
  3. 采用handle消息机制实现轮播效果
  4. Android Dialog AlertDialog
  5. js 定义函数的几种方法 以及如何调用
  6. 在WPF中自定义你的绘制(三)
  7. JVM 指令集合
  8. nodeJS之URL
  9. win7、win10进程pid4占用80端口的解决办法
  10. bjtu 1819 二哥求和(前缀和)
  11. CSS 图像精灵
  12. String、StringBuilder和StringBuffer的区别
  13. Go VSCode配置编译task
  14. RPC原理
  15. python3自学第二天,模块,三元运算
  16. python 爬虫newspaper3k 新闻爬去方法 利用第三方库
  17. 运维人员word优化
  18. mysql 远程 ip访问
  19. Javascript非构造函数的继承
  20. C++模式学习------适配器模式

热门文章

  1. clion idea jetbrain windows下搞c/c++
  2. Chapter 14_2 全局变量声明
  3. HttpServletResponse对象(一)
  4. gcc及其选项详解 【转载】
  5. 十七、oracle 权限
  6. [WPF] 浏览百度地图并获取经纬度地址信息
  7. RLE行程长度编码压缩算法
  8. VBS基础篇 - VBScript过程
  9. nmon命令用法
  10. Eclipse的WorkingSet使用(转载)