luogu#P1963. [NOI2009] 变换序列

[NOI2009] 变换序列

题目描述

对于 NN 个整数 0,1,,N10, 1, \cdots, N-1,一个变换序列 TT 可以将 ii 变成 TiT_i,其中 Ti{0,1,,N1}T_i \in \{ 0,1,\cdots, N-1\}i=0N1{Ti}={0,1,,N1}\bigcup_{i=0}^{N-1} \{T_i\} = \{0,1,\cdots , N-1\}x,y{0,1,,N1}\forall x,y \in \{0,1,\cdots , N-1\},定义 xxyy 之间的距离 D(x,y)=min{xy,Nxy}D(x,y)=\min\{|x-y|,N-|x-y|\}。给定每个 iiTiT_i 之间的距离 D(i,Ti)D(i,T_i),你需要求出一个满足要求的变换序列 TT。如果有多个满足条件的序列,输出其中字典序最小的一个。

说明:对于两个变换序列 SSTT,如果存在 p<Np<N,满足对于 i=0,1,p1i=0,1,\cdots p-1Si=TiS_i=T_iSp<TpS_p<T_p,我们称 SSTT 字典序小。

输入格式

第一行包含一个正整数 NN,表示序列的长度。接下来的一行包含 NN 个整数 DiD_i,其中 DiD_i 表示 iiTiT_i 之间的距离。

输出格式

如果至少存在一个满足要求的变换序列 TT,则输出文件中包含一行 NN 个整数,表示你计算得到的字典序最小的 TT;否则输出 No Answer(不含引号)。注意:输出文件中相邻两个数之间用一个空格分开,行末不包含多余空格。

5
1 1 2 2 1

1 2 4 0 3

提示

  • 对于 30%30\% 的数据,满足:N50N \le 50
  • 对于 60%60\% 的数据,满足:N500N \le 500
  • 对于 100%100\% 的数据,满足:N104N \le 10 ^ 4