#include <iostream>
#include <vector>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> a(n + 1);
vector<int> pos(n + 1); // 记录每个数字的位置
// 读入数组并记录位置
for(int i = 1; i <= n; i++) {
cin >> a[i];
pos[a[i]] = i;
}
// 寻找第一个不在正确位置的数
for(int i = 1; i <= n; i++) {
if(a[i] != i) {
// 交换a[i]和值i所在位置的数
int j = pos[i];
swap(a[i], a[j]);
// 输出结果
for(int k = 1; k <= n; k++) {
cout << a[k] << (k == n ? '\n' : ' ');
}
return 0;
}
}
// 如果所有数都在正确位置,交换最后两个数
swap(a[n], a[n-1]);
for(int i = 1; i <= n; i++) {
cout << a[i] << (i == n ? '\n' : ' ');
}
return 0;
}
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] a = new int[n + 1];
int[] pos = new int[n + 1]; // 记录每个数字的位置
// 读入数组并记录位置
for(int i = 1; i <= n; i++) {
a[i] = sc.nextInt();
pos[a[i]] = i;
}
// 寻找第一个不在正确位置的数
for(int i = 1; i <= n; i++) {
if(a[i] != i) {
// 交换a[i]和值i所在位置的数
int j = pos[i];
int temp = a[i];
a[i] = a[j];
a[j] = temp;
// 输出结果
for(int k = 1; k <= n; k++) {
System.out.print(a[k] + (k == n ? "\n" : " "));
}
return;
}
}
// 如果所有数都在正确位置,交换最后两个数
int temp = a[n];
a[n] = a[n-1];
a[n-1] = temp;
for(int i = 1; i <= n; i++) {
System.out.print(a[i] + (i == n ? "\n" : " "));
}
}
}
n = int(input())
a = [0] + list(map(int, input().split()))
pos = [0] * (n + 1) # 记录每个数字的位置
# 记录每个数字的位置
for i in range(1, n + 1):
pos[a[i]] = i
# 寻找第一个不在正确位置的数
for i in range(1, n + 1):
if a[i] != i:
# 交换a[i]和值i所在位置的数
j = pos[i]
a[i], a[j] = a[j], a[i]
# 输出结果
print(*a[1:])
exit()
# 如果所有数都在正确位置,交换最后两个数
a[n], a[n-1] = a[n-1], a[n]
print(*a[1:])