#1394. [CZOJ 一周一测 R27 D] 水果天堂

[CZOJ 一周一测 R27 D] 水果天堂

水果之宴,天堂欢仙。

Description

「水果天堂」有三个场景,色调分别为蓝色、绿色、红色。

小玖想找找这些场景之间的相似程度。她首先找到了三个场景可以映射到的序列 a,b,ca,b,c(长度依次为 n,m,kn,m,k),并且他们会遵循一定规律生成(见输入格式)。

小玖只要找到 a,b,ca,b,c 的最长公共子序列就好了。请你帮帮她。

Format

Input

一行输入五个正整数 n,m,k,V,seedn,m,k,V,\text{seed}

然后根据下列参考代码,调用 init() 即可生成数据。

#define N 1000005
unsigned int seed;
int n,m,k,V,a[N],b[N],c[N];
int rnd()
{
    seed^=seed<<13;
    seed^=seed>>7;
    seed^=seed<<17;
    seed^=seed>>5;
    seed^=seed<<11;
    seed%=V;
    return seed;
}
void init()
{
    for(int i=1;i<=n;i++) a[i]=rnd();
    for(int i=1;i<=m;i++) b[i]=rnd();
    for(int i=1;i<=k;i++) c[i]=rnd();
}

Output

一行一个正整数,表示 LCS(a,b,c)\text{LCS}(a,b,c),即 a,b,ca,b,c 的最长公共子序列长度。

Samples

10 10 10 100 114514
0
1000 1000 1000 114514 1919810
456

Explanation

对于样例 11,生成的序列如下:

$$\begin{aligned} a&=\{13,31,1,35,60,57,94,4,16,76\}\\ b&=\{30,38,51,52,49,66,64,10,18,54\}\\ c&=\{71,3,89,45,90,80,42,27,73,65\} \end{aligned} $$

Limitation

对于 20%20\% 的数据,1n,m,k500,1V20001\le n,m,k\le 500,1\le V\le2000

对于 60%60\% 的数据,1n,m,k1000,1V1041\le n,m,k\le 1000,1\le V\le10^4

对于 100%100\% 的数据,$1\le n,m,k\le 10^6,1\le V\le2\times10^6,0\le\text{seed}<2^{32}$。