时间限制:C/C++/Rust/Pascal 3秒,其他语言6秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld
题目描述
有一个无向图,其顶点为

,最初没有边。
您需要在这个图上进行以下两种操作:
操作

:给定

,将 节点

和节点

连一条长度为

的边。(保证在添加边之前,不存在

到达

的路径。)
操作

:给定

,求

和

之间的最短路径长度。如果

无法到达

,输出

。
输入描述:
本题要求强制在线。
第一行给出两个整数
,
表示无向图的点的数量,
表示操作的次数。
接下来有
行,每行给出
个正整数
。具体意义如下:
假设
为上一次
操作的答案。定义一开始时
。
)%20%5Cbmod%20998244353)%5Cbmod%202)%5C%5C%0A%26u%20%3D1%2B(((B%C3%97(2%2Blastans))%20%5Cbmod%20998244353)%5Cbmod%20n)%20%5C%5C%20%0A%26v%20%3D1%2B(((C%C3%97(2%2Blastans))%20%5Cbmod%20998244353)%5Cbmod%20n)%0A%5Cend%7Baligned%7D)
其中
表示操作的种类,
的具体意义如题意所示。
输出描述:
对于每次询问,输出一行整数表示答案。
示例1
输入
复制
5 7
2 499122184 13
1 13 499122190
499122186 10 499122185
249561091 748683266 499122178
665496237 332748123 4
332748119 2 6
665496241 332748121 332748122
说明
原本的样例数据为
5 7
1 1 2
1 2 3
2 1 3
2 1 2
2 2 3
1 2 4
2 1 4