题号:NC226052
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld
题目描述
如图所示,在某个地方有两座层数为

的高塔,两座高塔的内部各自都有连接到上一层的楼梯,即每座塔的第

层可以直接上楼梯到第

层。
同时,在两座高塔之间还会存在一些连接两座高塔的楼梯,具体来说,除了顶层以外,每一层都是以下这两种情况之一。
- 左侧高塔的第
层有楼梯连接右侧高塔的第
层。 - 右侧高塔的第
层有楼梯连接左侧高塔的第
层。
楼梯的高度在这个问题中可能会随时被修改,同时,塔的结构也有可能改变,也就是说除了顶层以外,每一层都有可能从第1种情况改变成第2种情况,我们用字符'/'表示第1种情况,用字符'\'表示第2种情况。
现在智乃想知道,她从某座高塔的第

层移动到

层(

),在只能走楼梯上楼的情况下,移动的最短路是多少?
当然,并不总是都可以到达目标地点,当不存在任何一条合法道路的时候,要求你输出

表示无解。
输入描述:
第一行输入两个正整数
%7D)
表示高塔的层数,以及询问的次数。
第二行输出一个长度大小为

的字符串,字符串仅包括

。
接下来输入

行,每行三个正整数
%20%7D)
,第

层左侧塔上楼楼梯的长度,第

层右侧塔上楼楼梯的长度,第

层两座塔之间楼梯上楼的长度。
接下来

行,每行首先输入一个非负整数

表示操作的类型。
当

时,表示这是一个修改塔楼梯结构的操作。
接下来还会继续输入一个正整数
%7D)
和一个字符
%7D)
,表示第

层的塔结构变为

。
当

时,表示这是一个修改塔楼梯长度的操作。
接下来还会继续输入四个正整数
%20%7D)
,表示修改后第

层左侧塔上楼楼梯的长度,第

层右侧塔上楼楼梯的长度,第

层两座塔之间楼梯上楼的长度。
当

时,表示这是一个查询操作。
接下来还会继续输入四个整数
%2Cps%2Cpt(ps%2Cpt%20%5Cin%5C%7B0%2C1%5C%7D)%7D)
,分别表示智乃酱一开始的层数

,她想去的层数

。
当

为0时,表示一开始在左边的塔,否则表示一开始在右边的塔。
当

为0时,表示她的终点为左边的塔,否则表示终点为右边的塔。
输出描述:
对于每一个
输出一行,输出移动的最短路,如果无法到达则输出
。
示例1
输入
复制
4 13
///
1 2 1
2 3 5
8 8 1
2 1 4 1 0
0 3 \
2 1 4 0 0
2 2 4 0 0
2 2 4 0 1
2 3 4 0 1
2 3 4 1 0
1 1 1 1 1
1 2 1 1 1
1 3 1 1 1
2 1 4 1 0
0 3 /
2 1 4 1 0