配点 : 900 点
問題文
非負整数 x,k に対して,x の 10k の位とは,⌊10kx⌋ を 10 で割った余りのことをいいます.例えば 123 の 100, 101, 102, 103 の位はそれぞれ 3,2,1,0 です.
正整数 N,M,K および非負整数列 A=(A1,…,AN), B=(B1,…,BN) が与えられます.
次の手順によって A を並べ替えることを考えます.
- 次を M 回行う:- 0≤k≤K−1 となる整数 k をひとつ選ぶ.
- その後,A を 10k の位に関して安定ソートする.つまり,d=0,1,…,9 に対して,A の部分列 A(d) を A の要素のうち 10k の位が d であるようなもの全体として定め,A(0),A(1),…,A(9) をこの順に連結してできる列で A を置き換える.
- 0≤k≤K−1 となる整数 k をひとつ選ぶ.
- その後,A を 10k の位に関して安定ソートする.つまり,d=0,1,…,9 に対して,A の部分列 A(d) を A の要素のうち 10k の位が d であるようなもの全体として定め,A(0),A(1),…,A(9) をこの順に連結してできる列で A を置き換える.
このような手順は KM 通りありますが,その結果 A が B に等しくなるものの個数を 998244353 で割った余りを求めてください.
制約
- 1≤N≤2×105
- 1≤M≤109
- 1≤K≤18
- 0≤Ai<10K
- 0≤Bi<10K
- A と B は多重集合として一致する.つまり任意の整数 x に対して,x が A に現れる回数は x が B に現れる回数と一致する.
入力
入力は以下の形式で標準入力から与えられます.
N M K
A1 … AN
B1 … BN
出力
A が B に等しくなるような手順の個数を 998244353 で割った余りを出力してください.
3 2 3
74 42 54
42 54 74
5
1 回目に選ぶ k を k1,2 回目に選ぶ k を k2 とします.例えば k1=0,k2=1 のとき A は次のように変化します.
- 10k1=100 の位に関する安定ソートにより,A は (42,74,54) になる.
- 10k2=101 の位に関する安定ソートにより,A は (42,54,74) になる.
すべての手順および,その結果の A は以下の通りです:
- (k1,k2)=(0,0):A=(42,74,54).
- (k1,k2)=(0,1):A=(42,54,74).
- (k1,k2)=(0,2):A=(42,74,54).
- (k1,k2)=(1,0):A=(42,54,74).
- (k1,k2)=(1,1):A=(42,54,74).
- (k1,k2)=(1,2):A=(42,54,74).
- (k1,k2)=(2,0):A=(42,74,54).
- (k1,k2)=(2,1):A=(42,54,74).
- (k1,k2)=(2,2):A=(74,42,54).
2 1 1
2 3
3 2
0
条件を満たす手順は存在しません.
5 100 4
0 12 34 56 78
0 12 34 56 78
982924732
4100 通りの手順すべてが条件を満たします.