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 C++14 (judge verdict: Accepted)

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
#define FOR(i,s,e) for(int i=(s);i<(e);i++)
#define REP(i,n) FOR(i,0,n)

int main(){
    int n, q;
    cin >> n >> q;
    LL st = 0;
    REP(i, q){
        int a, k;
        cin >> a >> k;
        if(a==0){
            LL ans = (k+st)%n;
            if(ans == 0) ans = n;
            cout << ans << endl;
        }else{
            st = (st+k)%n;
        }
    }

        return 0;
}