← Home
```go
package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Scan()
	n, _ := strconv.Atoi(scanner.Text())
	scanner.Scan()
	parts := strings.Fields(scanner.Text())
	s := make([]int64, n)
	for i := 0; i < n; i++ {
		v, _ := strconv.ParseInt(parts[i], 10, 64)
		s[i] = v
	}

	var result int64 = -1
	n64 := int64(n)
	nPlus1 := int64(n + 1)

	// Upper bound for next station: from condition sNext * n < (s[n-1]+1)*(n+1)
	maxPossible := ((s[n-1] + 1) * nPlus1) / n64
	if ((s[n-1]+1)*nPlus1)%n64 == 0 {
		maxPossible--
	}

	for sNext := s[n-1] + 1; sNext <= maxPossible; sNext++ {
		valid := true
		for i := int64(0); i < n64; i++ {
			idx := i + 1
			si := s[i]
			// Condition: si*(n+1) < (sNext+1)*idx  (from L < R')
			if si*nPlus1 >= (sNext+1)*idx {
				valid = false
				break
			}
			// Condition: sNext*idx < (si+1)*(n+1)  (from L' < R)
			if sNext*idx >= (si+1)*nPlus1 {
				valid = false
				break
			}
		}
		if valid {
			if result == -1 {
				result = sNext
			} else {
				fmt.Println("not unique")
				return
			}
		}
	}

	if result != -1 {
		fmt.Println("unique")
		fmt.Println(result)
	} else {
		fmt.Println("not unique")
	}
}
```