package main
import (
"bufio"
"fmt"
"os"
)
func main() {
reader := bufio.NewReader(os.Stdin)
var n int
fmt.Fscan(reader, &n)
f := make([]int, n+1)
received := make([]bool, n+1)
var G []int
for i := 1; i <= n; i++ {
fmt.Fscan(reader, &f[i])
if f[i] == 0 {
G = append(G, i)
} else {
received[f[i]] = true
}
}
isG := make([]bool, n+1)
for _, g := range G {
isG[g] = true
}
var A []int
var B []int
var C []int
for i := 1; i <= n; i++ {
if !received[i] {
if isG[i] {
A = append(A, i)
} else {
B = append(B, i)
}
}
}
for _, g := range G {
if received[g] {
C = append(C, g)
}
}
if len(A) > 1 {
for i := 0; i < len(A)-1; i++ {
f[A[i]] = A[i+1]
}
f[A[len(A)-1]] = A[0]
for i := 0; i < len(B); i++ {
f[C[i]] = B[i]
}
} else if len(A) == 1 {
f[A[0]] = B[0]
f[C[0]] = A[0]
for i := 1; i < len(B); i++ {
f[C[i]] = B[i]
}
} else {
for i := 0; i < len(B); i++ {
f[C[i]] = B[i]
}
}
out := bufio.NewWriter(os.Stdout)
for i := 1; i <= n; i++ {
fmt.Fprint(out, f[i])
if i < n {
fmt.Fprint(out, " ")
}
}
fmt.Fprintln(out)
out.Flush()
}