Problem:
Problem C: Round And Round

Problem

長さ$N$の数列$A=${$a_{1},a_{2},a_{3},...,a_{n}$}が与えられる。

$a_{i}$ ($i=1,2,3,...,n$)は、$i$で初期化されているものとする。

以下の二種類のクエリを合計$Q$回処理せよ。

数列$A$の先頭から$k$番目の要素の値を出力する。

数列$A$の先頭から$k$と$k+1$番目を境界に二つの数列をスワップする。

詳しくはサンプル入出力を参考にせよ。

Input

入力は以下の形式で与えられる。

$N$ $Q$
$query_1$
$query_2$
...
$query_Q$

各クエリは以下の二種類のいずれかの形式で与えられる。

クエリ$0$

$0$ $k$

数列$A$の先頭から$k$番目の要素の値を出力する。

クエリ$1$

$1$ $k$

数列$A$の先頭から$k$と$k+1$番目を境界に二つの数列をスワップする。

入力はすべて整数で与えられる。

$1$行目に$N$, $Q$が空白区切りで与えられる。

$2$行目以降の$Q$行にクエリが改行区切りで与えられる。

各クエリ内の数値は全て空白区切りである。

Constraints

入力は以下の条件を満たす。

$2 \leq N \leq 10^9 $

$1 \leq Q \leq 10^5 $

各クエリについて、入力は以下の条件を満たす。

クエリ$0$

$1 \leq k \leq N $

クエリ$1$

$1 \leq k \leq N-1 $

Output

各クエリ$1$に対し値を一行に出力せよ。

Sample Input 1

5 4
1 2
0 2
1 1
0 3

Sample Output 1

4
1

長さ$5$の数列$A=[1,2,3,4,5]$が与えられる

$1$番目のクエリで $[1,2,3,4,5]$ -> $[1,2] [3,4,5]$ -> $[3,4,5] [1,2]$ -> $[3,4,5,1,2]$ と数列が変化する。

$2$番目のクエリで先頭から$2$番目の要素の値である$4$を出力する。

$3$番目のクエリで $[3,4,5,1,2]$ -> $[3] [4,5,1,2]$ -> $[4,5,1,2] [3]$ -> $[4,5,1,2,3]$ と数列が変化する。

$4$番目のクエリで先頭から$3$番目の要素の値である$1$を出力する。

Sample Input 2

4 4
1 2
1 1
0 1
0 4

Sample Output 2

4
3

Sample Input 3

10 6
1 1
0 1
1 9
0 5
1 1
0 10

Sample Output 3

2
5
1

Solution in Scala (judge verdict: Accepted)

import scala.annotation.tailrec

object Main extends App {

  import scala.io.StdIn._
  import scala.math._

  val Array(n, q) = readLine.trim.split(' ').map(_.toInt)
  var orient: Int = 0
  for (_ ← 0 until q){
    readLine.trim.split(' ').map(_.toInt) match {
      case Array(0, k) ⇒ println((orient + k - 1) % n + 1)
      case Array(1, k) ⇒ orient = (orient + k) % n
    }
  }
  implicit class Extension[T](val value :T){
    def also(func: T ⇒ Unit): T = {
      func(value)
      value
    }
    def let[R](func: T ⇒ R): R = func(value)
  }
}