```go
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
t, _ := strconv.Atoi(scanner.Text())
for test := 0; test < t; test++ {
scanner.Scan()
n, _ := strconv.Atoi(scanner.Text())
a := make([]int, n)
for i := 0; i < n; i++ {
scanner.Scan()
a[i], _ = strconv.Atoi(scanner.Text())
}
paths := make([][]int, n)
stack := make([]int, 0)
for i := 0; i < n; i++ {
if a[i] == 1 {
stack = append(stack, 1)
} else {
for len(stack) > 0 && stack[len(stack)-1] != a[i]-1 {
stack = stack[:len(stack)-1]
}
stack[len(stack)-1] = a[i]
}
paths[i] = make([]int, len(stack))
copy(paths[i], stack)
}
for i := 0; i < n; i++ {
strs := make([]string, len(paths[i]))
for j := 0; j < len(paths[i]); j++ {
strs[j] = strconv.Itoa(paths[i][j])
}
fmt.Println(strings.Join(strs, "."))
}
}
}
```