```go
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
scanner.Split(bufio.ScanWords)
var t int
scanner.Scan()
fmt.Sscan(scanner.Text(), &t)
for tc := 0; tc < t; tc++ {
var n int
scanner.Scan()
fmt.Sscan(scanner.Text(), &n)
a := make([]int, n)
for i := 0; i < n; i++ {
scanner.Scan()
fmt.Sscan(scanner.Text(), &a[i])
}
ans := a[n-1] - a[0]
if n > 2 {
minMid := a[1]
maxMid := a[1]
for i := 2; i < n-1; i++ {
if a[i] < minMid {
minMid = a[i]
}
if a[i] > maxMid {
maxMid = a[i]
}
}
if a[n-1]-minMid > ans {
ans = a[n-1] - minMid
}
if maxMid-a[0] > ans {
ans = maxMid - a[0]
}
}
for i := 0; i < n-1; i++ {
if a[i]-a[i+1] > ans {
ans = a[i] - a[i+1]
}
}
fmt.Println(ans)
}
}
```