原题解链接:https://ac.nowcoder.com/discuss/151505

显然n1n≠1nmod40n \,mod\, 4 ≠ 0 时答案为00, n=1n=1答案为11

下面考虑 nmod4=0n \,mod \,4 = 0 的情况:

假设 at=ta_{t}=t, 取 i=j=ti= j=t2t=n+12 t=n+1

这时nn是奇数,矛盾。

at=n+1ta_{t}=n+1-t, 取 i=n+1t,j=ti=n+1-t, j=t, 同样矛盾。

假设 at=u(ut,un+1t)a_{t}=u(u \neq t, u \neq n+1-t)

i=uj=ti=u , j=t ,得 au=n+1ta_{u}=n+1-t

i=n+1tj=uan+1t=n+1ui=n+1-t , j=u , a_{n}+1-t=n+1-u

i=n+1u,j=n+1ti=n+1-u, j=n+1-t, 得 an+1u=ta_{n}+1-u=t

由于ut,un+1tu≠t,u≠n+1-t,观察上述等式发现等号右边的四个数两两不同。

进而将此44个数分成形如(u,n+1V)(u,n+ 1 - V )的两组。可找到这样的四元数组其在排列的相同位置是相同的四个数,但顺序不同。

因此可以通过如下步骤得到全部排列:

1.取最小的整数KK,使得aka_k待定,进而求出auan+1uan+1ka_u,a_n +1-u,a_n+1- k

2.重复上述过程。

显然答案=2×6×10...×(n2)=2 \times 6\times10... \times(n-2)

所以答案等价于n2!n!4!\frac{\frac{n}{2} !}{\frac{n !}{4} !}

#include<bits/stdc++.h>
#define Mod 998244353
#define N 2000005
using namespace std;
int n,fac[N];
inline int ksm(int x,int y){
	int ans1=1;while (y){
		if (y&1) ans1=1ll*ans1*x%Mod;
		y>>=1;x=1ll*x*x%Mod;
	}return ans1;
}
int main(){
	scanf("%d",&n);fac[0]=1;
	if (n==1) return puts("1"),0;
	if (n&3) return puts("0"),0;
	for (int i=1;i<=n;i++) fac[i]=1ll*fac[i-1]*i%Mod;
	printf("%lld\n",1ll*fac[n/2]*ksm(fac[n/4],Mod-2)%Mod);
	return 0;
}