```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")
}
}
```