G:小西的军训
题号:NC206068
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 128 M,其他语言256 M
64bit IO Format: %lld

题目描述

XUT的新生开学都需要进行一次特别重要的活动,那就是军训。在军训中新生会进行一系列的训练,最先进行的就是队列训练,为了让队列训练更有意思,教官会发出一个命令来训练这些学生。参加过军训的同学都知道军训完之后会进行汇报表演。这时候学校领导又会有一个操作来询问学生队列的状态。

首先,XUT每一年会录取最大30000名同学,这些学生最开始每个人成一列整齐的站在曲江的操场上,听取教官的指令来进行队列组合,教官的一个操作命令就是M a b,教官想把a号同学所在的队列接在b号同学所在队列的尾部(i号同学队列的顺序是不变的)。在教官的所有命令之间有学校领导会发出询问,这个询问指令就是C a b,他的意思就是查询a和b两个同学是否在一个队列里面,如果在的话,教官需要告诉学校领导他们之间有多少同学。但是教官太忙了(其实教官数学不太好),所以教官选择你来写一个简单的程序来应对学校领导的询问,他相信你可以办到的QAQ。

输入描述:

第一行只有一个整数T(1<=T<=5*10^5),表示教官和学校领导一共有T条指令。

接下来的T行,每一行包含一条指令,指令有两种格式,分别对应教官和学校领导的指令。

(1)M a b: a b是两个整数(1<=a,b<=30000),表示教官的调动指令,并且保证第i号同学和第j号同学不在同一列。

(2)C a b: a b是两个整数(1<=a,b<=30000),表示学校领导发出的询问指令。

输出描述:

依次对每条指令进行分析和处理

(1)如果是调动指令,你的程序可能需要修改某些数据,但是不需要输出任何信息。

(2)如果是询问指令,你的输出需要占一行,仅包含一个整数,如果第i号同学和第j号同学在同一列,就输出两者之间的同学数目,如果两个同学不在同一列,就输出-1.

示例1

输入

复制
4
M 2 3
C 1 2
M 2 4
C 4 2

输出

复制
-1
1