package main
import (
"bufio"
"fmt"
"os"
"strconv"
)
func main() {
for {
scanner := bufio.NewScanner(os.Stdin)
// 设置大缓冲区,防止大输入时出错
buf := make([]byte, 1024*1024) // 1MB
scanner.Buffer(buf, 1024*1024)
scanner.Split(bufio.ScanWords) // 按单词扫描(空格、换行等分隔)
// 读取第一行:n
scanner.Scan()
n, _ := strconv.Atoi(scanner.Text())
if n == 0 {
break
}
arr := make([]int, n)
for i := 0; i < n; i++ {
scanner.Scan()
arr[i], _ = strconv.Atoi(scanner.Text())
}
fmt.Println(process(arr))
}
}
// func process(arr []int) int {
// n := len(arr)
// hash := make([]int, n)
// for i := 0; i < n; i++ {
// if arr[i] >= 1 && arr[i] <= n && hash[arr[i]-1] == 0 {
// hash[arr[i]-1] = arr[i]
// }
// }
// for i := 0; i < n; i++ {
// if hash[i] != i+1 {
// return i + 1
// }
// }
// return n + 1
// }
func process(arr []int) int {
n := len(arr)
for i := 0; i < n; i++ {
// 原地哈希做法
for arr[i] >= 1 && arr[i] <= n && arr[arr[i]-1] != arr[i] {
j := arr[i] - 1
arr[j], arr[i] = arr[i], arr[j]
}
}
for i := 0; i < n; i++ {
if arr[i] != i+1 {
return i + 1
}
}
return n + 1
}