← Home
package main

import (
	"bufio"
	"fmt"
	"os"
	"sort"
)

const INF int64 = 1e18

type City struct {
	a int64
	b int64
}

func min(a, b int64) int64 {
	if a < b {
		return a
	}
	return b
}

func main() {
	reader := bufio.NewReader(os.Stdin)
	writer := bufio.NewWriter(os.Stdout)
	defer writer.Flush()

	var t int
	if _, err := fmt.Fscan(reader, &t); err != nil {
		return
	}

	for tc := 0; tc < t; tc++ {
		var n int
		fmt.Fscan(reader, &n)

		cities := make([]City, n+1)
		for i := 1; i <= n; i++ {
			fmt.Fscan(reader, &cities[i].a, &cities[i].b)
		}

		sort.Slice(cities[1:], func(i, j int) bool {
			return (cities[1+i].a - cities[1+i].b) < (cities[1+j].a - cities[1+j].b)
		})

		dpL := make([][][3]int64, n+2)
		dpR := make([][][3]int64, n+2)
		for i := 0; i <= n+1; i++ {
			dpL[i] = make([][3]int64, n/2+2)
			dpR[i] = make([][3]int64, n/2+2)
			for k := 0; k <= n/2+1; k++ {
				for e := 0; e < 3; e++ {
					dpL[i][k][e] = INF
					dpR[i][k][e] = INF
				}
			}
		}

		dpL[0][0][0] = 0
		for i := 1; i <= n; i++ {
			for k := 0; k <= n/2+1; k++ {
				for e := 0; e < 3; e++ {
					dpL[i][k][e] = dpL[i-1][k][e]
					if k > 0 {
						if dpL[i-1][k-1][e] != INF {
							dpL[i][k][e] = min(dpL[i][k][e], dpL[i-1][k-1][e]+2*cities[i].b)
						}
						if e > 0 && dpL[i-1][k-1][e-1] != INF {
							dpL[i][k][e] = min(dpL[i][k][e], dpL[i-1][k-1][e-1]+cities[i].b)
						}
					}
				}
			}
		}

		dpR[n+1][0][0] = 0
		for i := n; i >= 1; i-- {
			for k := 0; k <= n/2+1; k++ {
				for e := 0; e < 3; e++ {
					dpR[i][k][e] = dpR[i+1][k][e]
					if k > 0 {
						if dpR[i+1][k-1][e] != INF {
							dpR[i][k][e] = min(dpR[i][k][e], dpR[i+1][k-1][e]+2*cities[i].a)
						}
						if e > 0 && dpR[i+1][k-1][e-1] != INF {
							dpR[i][k][e] = min(dpR[i][k][e], dpR[i+1][k-1][e-1]+cities[i].a)
						}
					}
				}
			}
		}

		for c := 2; c <= n; c++ {
			ans := INF
			k := c / 2
			if c%2 == 0 {
				for i := 0; i <= n; i++ {
					val := dpL[i][k][1] + dpR[i+1][k][1]
					if val < ans {
						ans = val
					}
				}
			} else {
				for i := 0; i <= n; i++ {
					val1 := dpL[i][k][0] + dpR[i+1][k+1][2]
					if val1 < ans {
						ans = val1
					}

					val2 := dpL[i][k+1][2] + dpR[i+1][k][0]
					if val2 < ans {
						ans = val2
					}
				}
				for i := 1; i <= n; i++ {
					val3 := dpL[i-1][k][1] + cities[i].a + cities[i].b + dpR[i+1][k][1]
					if val3 < ans {
						ans = val3
					}
				}
			}
			if c == n {
				fmt.Fprintf(writer, "%d\n", ans)
			} else {
				fmt.Fprintf(writer, "%d ", ans)
			}
		}
	}
}