[语言月赛202212] 旋转排列

题目背景

我们称一个数列 $p$ 是一个长度为 $n$ 的排列,当且仅当 $p$ 满足如下条件: 1. $p$ 的长度为 $n$; 2. $1, 2, 3, \dots n$ 这 $n$ 个数在 $p$ 中均**恰好**出现一次。

题目描述

对于一个排列 $p$,定义一次“shift”操作是指:将 $p$ 里的每一个数字都依次向后移动一位,并把 $p$ 的最后一个数字移动到开头去。 例如,若排列 $p$ 初始时为 $[1,4,2,3]$,则“shift”一次以后将变为 $[3,1,4,2]$。 现在,给定一个长度为 $n$ 的排列 $p$,请你按照如下规定循环操作: 1. 对当前的排列 $p$ 做一次“shift”操作; 2. 输出本次“shift”以后的排列 $p$; 3. 判断排列 $p$ 的最后一个数字是否是 $n$,如果是,则结束循环操作;否则回到 $1$ 继续操作。 提示:**请严格按照题目给出的顺序进行循环操作。**

输入输出格式

输入格式


第一行是一个整数,表示排列 $p$ 的长度 $n$。 第二行有 $n$ 个整数表示排列 $p$,第 $i$ 个整数表示 $p_i$。

输出格式


对于每次操作的第二条“输出”操作,请你输出一行 $n$ 个整数,按顺序表示当前排列的每个数,一行中相邻两个数之间用一个空格隔开。

输入输出样例

输入样例 #1

4
1 4 2 3

输出样例 #1

3 1 4 2
2 3 1 4

输入样例 #2

3
1 2 3

输出样例 #2

3 1 2
2 3 1
1 2 3

输入样例 #3

10
1 7 6 5 8 4 3 9 10 2

输出样例 #3

2 1 7 6 5 8 4 3 9 10

说明

### 样例 2 解释 对 $p = [1, 2, 3]$,按如下顺序进行循环操作: 1. 进行一次“shift”操作,$p$ 变为 $[3,1,2]$; 2. 输出当前的排列 $p$,故输出第一行为 `3 1 2`; 3. 判断 $p_3 = 2 \neq 3$,故继续循环操作; 4. 进行一次“shift”操作,$p$ 变为 $[2,3,1]$; 5. 输出当前的排列 $p$,故输出第二行为 `2 3 1`; 6. 输出判断 $p_3 = 1 \neq 3$,故继续循环操作; 7. 进行一次“shift”操作,$p$ 变为 $[1,2,3]$; 8. 输出当前的排列 $p$,故输出第二行为 `1 2 3`; 9. 输出判断 $p_3 = 3 =3$,故停止循环; ### 数据规模与约定 各测试点的信息如下表: | 测试点编号 | $n = $ | 特殊约定 | | :-: | :-: | :-: | | $1$ | $1$ | 无| | $2$ | $2$ | 无 | | $3$ | $3$ | 无 | | $4 \sim 6$ | $2000$ | $p_{n - 1} = n$ | | $7 \sim 10$ | $2000$ | 无 | 对全部的测试点,保证 $1 \leq p_i \leq n \leq 2000$,$p$ 是长度为 $n$ 的排列。 By 一扶苏一