#C. [语言月赛202212] 旋转排列

    Type: RemoteJudge 1000ms 512MiB

[语言月赛202212] 旋转排列

You cannot submit for this problem because the contest is ended. You can click "Open in Problem Set" to view this problem in normal mode.

题目背景

我们称一个数列 pp 是一个长度为 nn 的排列,当且仅当 pp 满足如下条件:

  1. pp 的长度为 nn
  2. 1,2,3,n1, 2, 3, \dots nnn 个数在 pp 中均恰好出现一次。

题目描述

对于一个排列 pp,定义一次“shift”操作是指:将 pp 里的每一个数字都依次向后移动一位,并把 pp 的最后一个数字移动到开头去。

例如,若排列 pp 初始时为 [1,4,2,3][1,4,2,3],则“shift”一次以后将变为 [3,1,4,2][3,1,4,2]

现在,给定一个长度为 nn 的排列 pp,请你按照如下规定循环操作:

  1. 对当前的排列 pp 做一次“shift”操作;
  2. 输出本次“shift”以后的排列 pp
  3. 判断排列 pp 的最后一个数字是否是 nn,如果是,则结束循环操作;否则回到 11 继续操作。

提示:请严格按照题目给出的顺序进行循环操作。

输入格式

第一行是一个整数,表示排列 pp 的长度 nn
第二行有 nn 个整数表示排列 pp,第 ii 个整数表示 pip_i

输出格式

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

4
1 4 2 3
3 1 4 2
2 3 1 4
3
1 2 3
3 1 2
2 3 1
1 2 3
10
1 7 6 5 8 4 3 9 10 2
2 1 7 6 5 8 4 3 9 10

提示

样例 2 解释

p=[1,2,3]p = [1, 2, 3],按如下顺序进行循环操作:

  1. 进行一次“shift”操作,pp 变为 [3,1,2][3,1,2]
  2. 输出当前的排列 pp,故输出第一行为 3 1 2
  3. 判断 p3=23p_3 = 2 \neq 3,故继续循环操作;
  4. 进行一次“shift”操作,pp 变为 [2,3,1][2,3,1]
  5. 输出当前的排列 pp,故输出第二行为 2 3 1
  6. 输出判断 p3=13p_3 = 1 \neq 3,故继续循环操作;
  7. 进行一次“shift”操作,pp 变为 [1,2,3][1,2,3]
  8. 输出当前的排列 pp,故输出第二行为 1 2 3
  9. 输出判断 p3=3=3p_3 = 3 =3,故停止循环;

数据规模与约定

各测试点的信息如下表: | 测试点编号 | n=n = | 特殊约定 | | :-: | :-: | :-: | | 11 | 11 | 无| | 22 | 22 | 无 | | 33 | 33 | 无 | | 464 \sim 6 | 20002000 | pn1=np_{n - 1} = n | | 7107 \sim 10 | 20002000 | 无 |

对全部的测试点,保证 1pin20001 \leq p_i \leq n \leq 2000pp 是长度为 nn 的排列。

By 一扶苏一