← Home
```go
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)
	for i := 0; i < n; i++ {
		scanner.Scan()
		a[i], _ = strconv.Atoi(scanner.Text())
	}

	dp := make(map[int]int)
	maxLen := 0
	lastVal := -1

	for _, v := range a {
		length := dp[v-1] + 1
		dp[v] = length
		if length > maxLen {
			maxLen = length
			lastVal = v
		}
	}

	out := bufio.NewWriter(os.Stdout)
	defer out.Flush()

	out.WriteString(strconv.Itoa(maxLen) + "\n")

	res := make([]int, 0, maxLen)
	cur := lastVal
	for i := n - 1; i >= 0; i-- {
		if a[i] == cur {
			res = append(res, i+1)
			cur--
			if len(res) == maxLen {
				break
			}
		}
	}

	for i := len(res) - 1; i >= 0; i-- {
		out.WriteString(strconv.Itoa(res[i]))
		if i > 0 {
			out.WriteByte(' ')
		}
	}
	out.WriteByte('\n')
}
```