package main
import (
"bufio"
"fmt"
"os"
"sort"
)
func gcd(a, b int64) int64 {
for b != 0 {
a, b = b, a%b
}
return a
}
func getLcm(n int) int64 {
if n <= 1 {
return 1
}
l := int64(1)
for i := int64(2); i <= int64(n-1); i++ {
l = (l / gcd(l, i)) * i
if l > 2000000000 {
return 2000000001
}
}
return l
}
func main() {
reader := bufio.NewReader(os.Stdin)
writer := bufio.NewWriter(os.Stdout)
defer writer.Flush()
var t int
fmt.Fscan(reader, &t)
for tc := 0; tc < t; tc++ {
var n int
fmt.Fscan(reader, &n)
a := make([]int64, n)
var maxA int64 = 0
var sumA int64 = 0
for i := 0; i < n; i++ {
fmt.Fscan(reader, &a[i])
sumA += a[i]
if a[i] > maxA {
maxA = a[i]
}
}
if n == 1 {
fmt.Fprintln(writer, sumA)
continue
}
d := make([]int64, n)
var sumD int64 = 0
for i := 0; i < n; i++ {
d[i] = maxA - a[i]
sumD += d[i]
}
sort.Slice(d, func(i, j int) bool { return d[i] < d[j] })
L := getLcm(n)
terminal := true
for i := 0; i < n; i++ {
if d[i]%L != 0 {
terminal = false
break
}
}
if terminal && sumD%int64(n) != 0 {
terminal = false
}
if terminal {
fmt.Fprintln(writer, sumA)
continue
}
trapped := true
for i := 0; i < n-1; i++ {
if d[i]%L != 0 {
trapped = false
break
}
}
if trapped && d[n-1]%L != L-1 {
trapped = false
}
if trapped && sumD%int64(n) != int64(n-1) {
trapped = false
}
if trapped {
fmt.Fprintln(writer, sumA-1)
continue
}
fmt.Fprintln(writer, -1)
}
}