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

题目描述

一个 个点的有向图,初始每个顶点都有一个颜色,黑或白。
每一轮,每个顶点的颜色会改变,规则如下:如果在上一轮,有奇数个黑色顶点连向他,那么这个顶点会变成黑的;如果在上一轮,有偶数个黑色顶点连向他,那么这个顶点会变成白的。
初始状态为第 轮。
小渣渣想要知道对于某一个点,从第 轮开始,最少过了几轮,使得它在这几轮结束的时候,顶点是黑色的次数大于等于 次(第 轮结束也算)?

输入描述:

输入第一行三个数 ,表示顶点数,边数和询问次数。
接下来一行 个数(),表示这个点初始的颜色, 表示白, 表示黑。
接下来 行,每行两个数 ,表示有一条 的边,不存在重边和自环。
接下来 行,每行两个数 ,表示一次询问, 号点,在每轮结束时顶点是黑色的次数大于等于 次,所需的轮次最少是多少。

输出描述:

输出包含  行,每行一个数,表示每个询问的答案。如果不存在,输出 
示例1

输入

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

输出

复制
2
3
-1