寻找未曾见过的你
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

彼方为谁,无我有问。
九月露湿,待君之前。

在梦中,AR的灵魂被切割成了3部分,并且都被传送到了不同的次元空间。
这个次元空间可以用 <n,m> 来表示,有n个点,m条无向边。保证不同的次元空间n一定是相同的。
3个灵魂会在不同次元的同一个点苏醒,之后灵魂可以在图上任意游走(如果存在u连接v的边,则可以从u到v或者从v到u,或者原地不动),灵魂的移动速度可以假设为无穷大。
只有天亮的时候,3个灵魂停在同一个地方(编号相同的点),AR才可以苏醒。
你能帮AR计算一下,AR苏醒的方案数吗?
由于灵魂在次元空间苏醒的点是不一样的,所以你需要对每个点都求出,如果灵魂在这个点苏醒,AR苏醒的方案数。

输入描述:

第一行输入4个整数:n,x,y,z。分别代表次元空间的点的个数,第一个次元空间的边的数量,第二个次元空间的边的数量,第三个次元空间的边的数量。
然后x行,每行2个整数:u,v。代表第一个次元的点u和点v互相连接。
然后y行,每行2个整数:u,v。代表第二个次元的点u和点v互相连接。
然后z行,每行2个整数:u,v。代表第三个次元的点u和点v互相连接。
1<=n<=5e5
0<=x<=n
0<=y<=n
0<=z<=n
1<=u<=n
1<=v<=n

输出描述:

输出有n行。
第i行代表如果灵魂从点i苏醒,AR苏醒的方案数。
示例1

输入

复制
3 2 2 1
1 2
2 3
1 2
2 3
1 3

输出

复制
2
1
2

说明

如果在点1苏醒,那么可以三个灵魂都去点1或者点3。故方案数为2
如果在点2苏醒,那么三个灵魂只能都在点2.故方案数为1