luogu#P3637. 方程组

方程组

题目背景

从小学开始,我们就一直做各种各样的应用题,其中大多数的题目都可以抽象为解方程组。

为了提高效率,省下时间打隔膜学习OI,xht 准备开发一个自动解题器。其中的一个核心组件就是解方程组的程序,xht 决定将这个任务交给你。

题目描述

一开始,xht 有 NN 个变量,记为 x1,x2,,xnx_1,x_2,\cdots,x_n。另有一个常数 KK,以及 MM 个方程,每个方程都形如 xaxbc(modK)x_a-x_b≡c\pmod K

由于题目可能会变化,xht 需要不时增加一个新的方程,或者删掉一个方程。

同时,xht 会给你一些这样的询问:令变量 xa=cx_a=c,求另一个变量 xbmodKx_b \bmod K 的值。当然,有的时候会因为条件不足,无法解出 xbx_b,那么就输出 1-1

数据保证任意时刻两个变量之间最多存在一个方程。保证不会出现自相矛盾的方程组,也不会出现多余的条件(某个方程可以通过其他一些方程推出来)。

输入格式

第一行四个整数 N,M,K,QN,M,K,Q,含义如上。QQ 代表操作的条数。

接下来 MM 行,每行三个整数 a,b,ca,b,c,表示方程 xaxbc(modK)x_a-x_b≡c\pmod K

接下来 QQ 行,每行第一个数 tt 代表操作种类,

* t=1t=1,接下来输入 a,b,ca,b,c,代表增加一条方程 xaxbc(modK)x_a-x_b≡c\pmod K

* t=2t=2,接下来输入 a,ba,b,代表删除 a,ba,b 之间的方程,如果这条方程不存在,则什么也不做;

* t=3t=3,接下来输入 a,b,ca,b,c,代表询问:令 xa=cx_a=c,求 xbmodKx_b \bmod K 的值;

输出格式

对于每一个 33 操作(询问),输出一行一个数 xx0x<K0\le x<K),表示 xbmodKx_b \bmod K,如果条件不足,则输出 1-1

3 2 100 3
1 2 1
2 3 2
3 1 3 0
2 1 2
3 1 3 0
97
-1

提示

样例的解释:

一开始有两条方程:x1x2=1x_1-x_2=1x2x3=2x_2-x_3=2

第一次询问,令x1=0x_1=0,解得x3=(3)mod100=97x_3=(-3)\bmod100=97

第二次询问时,删掉了第二条方程,导致条件不足,无法解出 x3x_3,输出 1-1

对于 40%40\% 的数据,只有询问操作。

对于 100%100\% 的数据,1M<N1051\le M<N\le10^51Q1051\le Q\le10^52K1032\le K\le10^31a,bN1\le a,b\le N0c<K0\le c<K

保证所有的 aba\ne b