```go
package main
import (
"bufio"
"fmt"
"os"
"sort"
)
func main() {
reader := bufio.NewReader(os.Stdin)
writer := bufio.NewWriter(os.Stdout)
defer writer.Flush()
var t int
fmt.Fscan(reader, &t)
for ; t > 0; t-- {
var n int
fmt.Fscan(reader, &n)
segs := make([][2]int, n)
coords := make([]int, 0, 2*n)
for i := 0; i < n; i++ {
var l, r int
fmt.Fscan(reader, &l, &r)
segs[i] = [2]int{l, r}
coords = append(coords, l, r)
}
sort.Ints(coords)
m := 0
for i := range coords {
if i == 0 || coords[i] != coords[i-1] {
coords[m] = coords[i]
m++
}
}
coords = coords[:m]
mp := make(map[int]int, m)
for i, v := range coords {
mp[v] = i
}
segAtR := make([][]int, m)
for _, seg := range segs {
li, ri := mp[seg[0]], mp[seg[1]]
segAtR[ri] = append(segAtR[ri], li)
}
dp := make([][]int32, m)
for i := range dp {
dp[i] = make([]int32, m)
}
for r := 0; r < m; r++ {
for l := r; l >= 0; l-- {
if l < r {
dp[l][r] = dp[l][r-1]
}
for _, li := range segAtR[r] {
if li >= l {
var val int32 = 1
if li < r-1 {
val += dp[li+1][r-1]
}
if li > l {
val += dp[l][li-1]
}
if val > dp[l][r] {
dp[l][r] = val
}
}
}
}
}
fmt.Fprintln(writer, dp[0][m-1])
}
}
```