简要题意

谜题集中有 \(n\) 个谜题,第 \(i\) 个谜题形如:

\(i.\) 编号小于 \(i\) 的题目中你选择了几个 \(h_i\)
A. \(a_i\)
B. \(b_i\)
C. \(c_i\)
D. \(d_i\)

给定 \(n\),你需要构造一个谜题集,使得不同的正确答案数量尽可能多。输出正确答案数量(对 \(998244353\) 取模)和方案。若有多组解,输出任意一组解即可。

\(1 \leq n \leq 10^5\)

思路

构造。

每一道谜题中所有选项都可以选是不可能的。(但是第一题四个选项可以都选)

于是我们退而求其次,考虑编号 \(\geq2\) 的可以选 \(3\) 项。假设都可以选 \(B,C,D\),那么 \(h_i=A\) 即可。为了保证都可以选,\(b_i=c_i=d_i=a_i=0\)

于是,我们惊奇的发现构造完了!

正确答案数量就是 \(4\cdot3^{n-1}\)

代码

#include <bits/stdc++.h>
#define int long long
using namespace std;

const int mod = 998244353;

int fastpow(int a,int b,int mod){
	if(b==1)return a%mod;
	if(b==0)return 1%mod;
	int ret=1;
	if(b&1){
		ret*=b;
		ret%=mod;
		b--;
	}
	int k=fastpow(a,b>>1,mod);
	return ret*k*k;
}

int n;

signed main(){
	cin>>n;
	cout<<4*fastpow(3,n-1,mod)<<'\n';
	for(int i=1;i<=n;i++){
		cout<<"A 0 0 0 0\n";
	}
	return 0;
}