箱庭迷宫
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

爱丽丝啊。

总有一天,我会回来牵起你温暖的手,将你从那里救出来。

然后,再一次成为恋人吧。

在柴郡猫的帮助下,归雨和爱丽丝终于可以在箱庭迷宫中交流并行动。迷宫由编号 1nn 个箱庭组成,每个箱庭 i 有一条单向通道通往另一个箱庭 a_i。特别地,若 a_i = 0,则表示该箱庭是出口,一旦到达即可离开迷宫。

柴郡猫赋予了他们穿越箱庭的能力。他们可以无限次进行以下两种操作,每次操作花费一定的代价:

1. 选择一个人(归雨或爱丽丝)和一个非负整数 x,该人可以连续穿越 2^x 个箱庭,即沿着通道移动 2^x 步。该操作的代价为 A
2. 选择一个非负整数 x ,让两人同时穿越 2^x 个箱庭(此时他们必须处于同一箱庭),两人一起沿着通道移动 2^x 步,最终仍处于同一箱庭。该操作的代价为 B

注意:每次操作移动 2^x 步,需沿着箱庭间的唯一路径前进,且实际步数不得超过路径长度。

由于蠕动潜行者无时无刻不在追寻归雨,归雨必须尽快带着爱丽丝逃离迷宫。归雨希望在总代价最小的前提下逃离。注意,两人必须都到达出口才算成功逃离。

现在给定迷宫的布局,你需要回答多组询问,每组询问给出归雨和爱丽丝的初始位置,输出对应的最小总代价。

输入描述:

第一行四个整数 n, q, A, B1 \le n \le 5 \times 10^41 \le q \le 5\times10^41 \le A, B \le 10^5),表示箱庭的数量、询问的次数以及两种操作的代价。

第二行 n 个整数 a_1, a_2, \dots, a_n,其中 a_i 表示从箱庭 i 出发到达的下一个箱庭编号。若 a_i = 0,则箱庭 i 为出口。

接下来 q 行,每行两个整数 x, y1 \le x, y \le n),分别表示归雨和爱丽丝的初始所在箱庭编号。

保证迷宫是连通的,且从任意箱庭出发沿着通道前进最终都会到达唯一的出口(即 a_i = 0 的箱庭)。

输出描述:

对于每组询问,输出一行一个整数,表示在最优操作下的最小总代价。
示例1

输入

复制
10 3 30 1
2 3 4 5 6 7 8 9 10 0
7 7
5 3
9 7

输出

复制
2
32
31

说明


示例2

输入

复制
50 11 30 1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 0 16 17 18 19 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 25 2 6 19 28 30 31 24 39 36 42 13 29
45 39
9 14
3 23
3 6
39 50
33 8
1 13
16 35
41 15
29 27
42 22

输出

复制
63
61
62
62
63
31
62
30
60
60
64
示例3

输入

复制
17 5 30 8
0 1 2 3 4 5 6 7 8 9 10 11 7 13 14 15 16
12 17
2 3
5 8
1 12
17 17

输出

复制
76
38
68
90
24