← Home
package main

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

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

	t := int(readInt(reader))
	for tc := 0; tc < t; tc++ {
		n := int(readInt(reader))

		adj := make(map[int64][]int64)
		for i := 1; i <= n; i++ {
			a := readInt(reader)
			if i > 1 {
				u := a + int64(i-1)
				v := u + int64(i-1)
				adj[u] = append(adj[u], v)
			}
		}

		visited := make(map[int64]bool)
		queue := []int64{int64(n)}
		visited[int64(n)] = true
		maxLen := int64(n)

		for len(queue) > 0 {
			u := queue[0]
			queue = queue[1:]

			if u > maxLen {
				maxLen = u
			}

			for _, v := range adj[u] {
				if !visited[v] {
					visited[v] = true
					queue = append(queue, v)
				}
			}
		}

		fmt.Fprintln(writer, maxLen)
	}
}

func readInt(reader *bufio.Reader) int64 {
	var n int64
	for {
		c, err := reader.ReadByte()
		if err != nil {
			return n
		}
		if c >= '0' && c <= '9' {
			n = int64(c - '0')
			break
		}
	}
	for {
		c, err := reader.ReadByte()
		if err != nil {
			return n
		}
		if c < '0' || c > '9' {
			break
		}
		n = n*10 + int64(c-'0')
	}
	return n
}