P3637 方程组

题目背景

从小学开始,我们就一直做各种各样的应用题,其中大多数的题目都可以抽象为解方程组。 为了提高效率,省下时间~~打隔膜~~学习OI,xht 准备开发一个自动解题器。其中的一个核心组件就是解方程组的程序,xht 决定将这个任务交给你。

题目描述

一开始,xht 有 $N$ 个变量,记为 $x_1,x_2,\cdots,x_n$。另有一个常数 $K$,以及 $M$ 个方程,每个方程都形如 $x_a-x_b≡c\pmod K$。 由于题目可能会变化,xht 需要不时增加一个新的方程,或者删掉一个方程。 同时,xht 会给你一些这样的询问:令变量 $x_a=c$,求另一个变量 $x_b \bmod K$ 的值。当然,有的时候会因为条件不足,无法解出 $x_b$,那么就输出 $-1$。 数据保证任意时刻两个变量之间最多存在一个方程。保证不会出现自相矛盾的方程组,也不会出现多余的条件(某个方程可以通过其他一些方程推出来)。

输入格式

第一行四个整数 $N,M,K,Q$,含义如上。$Q$ 代表操作的条数。 接下来 $M$ 行,每行三个整数 $a,b,c$,表示方程 $x_a-x_b≡c\pmod K$。 接下来 $Q$ 行,每行第一个数 $t$ 代表操作种类, \* $t=1$,接下来输入 $a,b,c$,代表增加一条方程 $x_a-x_b≡c\pmod K$; \* $t=2$,接下来输入 $a,b$,代表删除 $a,b$ 之间的方程,如果这条方程不存在,则什么也不做; \* $t=3$,接下来输入 $a,b,c$,代表询问:令 $x_a=c$,求 $x_b \bmod K$ 的值;

输出格式

对于每一个 $3$ 操作(询问),输出一行一个数 $x$($0\le x

说明/提示

样例的解释: 一开始有两条方程:$x_1-x_2=1$,$x_2-x_3=2$。 第一次询问,令$x_1=0$,解得$x_3=(-3)\bmod100=97$。 第二次询问时,删掉了第二条方程,导致条件不足,无法解出 $x_3$,输出 $-1$。 对于 $40\%$ 的数据,只有询问操作。 对于 $100\%$ 的数据,$1\le M