根据欧拉定理,我们知道当一个无向图的奇点个数为 0022 时它就可以被一笔画出。

另外这个题数据不保证图是联通的,并查集判断一下就好。

想简单地说说这个遍历的方法,奇点为 00 不用说,一条入边一条出边,总有办法遍历掉,如果有两个奇点,遍历的时候就必须以其中一个为起点,另一个为终点,否则不满足奇偶性。

#include<cstdio>
int init(){
	char c = getchar();
	int x = 0, f = 1;
	for (; c < '0' || c > '9'; c = getchar())
		if (c == '-') f = -1;
	for (; c >= '0' && c <= '9'; c = getchar())
		x = (x << 1) + (x << 3) + (c ^ 48);
	return x * f;
}
void print(int x){
	if (x < 0) x = -x, putchar('-');
	if (x > 9) print(x / 10);
	putchar(x % 10 + '0');
}
const int N = (int) 3e1 + 5;
int du[N], fa[N];
int find(int x){
    return x == fa[x] ? x : fa[x] = find(fa[x]);
}
void merge(int u, int v){
    u = find(u), v = find(v);
    if (u < v) fa[v] = u;
    else fa[u] = v;
}
int main(){
    int T = init();
    while (T--) {
        int n = init(), m = init();
        for (int i = 1; i <= n; ++i)
            du[i] = 0, fa[i] = i;
        for (int i = 1; i <= m; ++i) {
            int u = init(), v = init();
            ++du[u], ++du[v];
            merge(u, v);
        }
        int odd = 0;
        for (int i = 1; i <= n; ++i)
            odd += (du[i] & 1);
        for (int i = 1; i <= n; ++i)
            if (find(i) != 1)
                odd += 4;
        if (odd == 0 || odd == 2)
            puts("Zhen");
        else
            puts("Xun");
    }
}