← Home
```go
package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	in := bufio.NewReader(os.Stdin)
	out := bufio.NewWriter(os.Stdout)
	defer out.Flush()

	var n int
	if _, err := fmt.Fscan(in, &n); err != nil {
		return
	}
	a := make([]int, n)
	for i := 0; i < n; i++ {
		fmt.Fscan(in, &a[i])
	}

	big := 1000000
	b := make([]int, n)
	for i := range b {
		b[i] = -1
	}

	prev := 0
	slots := make([]int, 0)
	ok := true

	for i := 0; i < n && ok; i++ {
		if a[i] < prev {
			ok = false
			break
		}
		if a[i] == prev {
			slots = append(slots, i)
		} else {
			need := a[i] - prev - 1
			if len(slots) < need {
				ok = false
				break
			}
			val := prev + 1
			for k := 0; k < need; k++ {
				pos := slots[0]
				slots = slots[1:]
				b[pos] = val
				val++
			}
			for _, pos := range slots {
				b[pos] = big
			}
			slots = slots[:0]
			b[i] = prev
			prev = a[i]
		}
	}

	if !ok {
		fmt.Fprintln(out, -1)
		return
	}

	for _, pos := range slots {
		b[pos] = big
	}

	for i := 0; i < n; i++ {
		if i > 0 {
			fmt.Fprint(out, " ")
		}
		fmt.Fprint(out, b[i])
	}
	fmt.Fprintln(out)
}
```