Problem2655--把最大值交换到最左边

2655: 把最大值交换到最左边

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 174  Solved: 105
[Status] [Submit] [Creator:]

Description

有 n 个各不相同的整数从左往右排成一排。

你可以对这 n 个整数进行任意次如下操作:  

☛ 每次操作,选择任意相邻的两个整数,并交换它们的位置。

你希望将这 n 个数中的最大值交换到最左边的位置。

你需要计算最少需要交换几次,以及执行完最少交换次数后,这 n 个数从左往右是如何排列的。

举个例子:  

有 5 个数,初始时从左往右依次为 [1, 3, 5, 4, 2]。  

最少需要交换 2 次:  
- 第 1 次,拿 3 和 5 交换位置,数字的排列更新为 [1, 5, 3, 4, 2]
- 第 2 次,拿 1 和 5 交换位置,数字的排列更新为 [5, 1, 3, 4, 2](这也是最终数字的排列)

Input

输入的第一行包含一个整数 n(2 ≤ n ≤ 1000)。

输入的第二行包含 n 个各不相同的整数,两两之间以一个空格分隔。每个整数均为不超过 1000 的正整数。

Output

输出共两行。

第一行包含一个整数,表示将最大值交换到最左边所需的最少操作次数。  

第二行包含 n 个整数,两两之间以一个空格分隔,表示执行完所有操作(即执行完最少的操作并将最大值交换到最左边)之后这 n 个数字从左往右的排列。  

Sample Input Copy

5
1 3 5 4 2

Sample Output Copy

2
5 1 3 4 2

Source/Category