← Home
package main

import (
	"bufio"
	"os"
	"strconv"
)

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Split(bufio.ScanWords)

	if !scanner.Scan() {
		return
	}
	n, _ := strconv.Atoi(scanner.Text())

	a := make([]int, n)
	used := make([]bool, n+1)
	keep := make([]bool, n)

	for i := 0; i < n; i++ {
		scanner.Scan()
		a[i], _ = strconv.Atoi(scanner.Text())
		if a[i] >= 1 && a[i] <= n && !used[a[i]] {
			used[a[i]] = true
			keep[i] = true
		}
	}

	missing := make([]int, 0, n)
	for i := 1; i <= n; i++ {
		if !used[i] {
			missing = append(missing, i)
		}
	}

	out := bufio.NewWriter(os.Stdout)
	missingIdx := 0
	for i := 0; i < n; i++ {
		if !keep[i] {
			a[i] = missing[missingIdx]
			missingIdx++
		}
		if i > 0 {
			out.WriteByte(' ')
		}
		out.WriteString(strconv.Itoa(a[i]))
	}
	out.WriteByte('\n')
	out.Flush()
}