← Home
package main

import (
	"bufio"
	"container/heap"
	"fmt"
	"os"
	"strings"
)

type Item struct {
	cnt int
	ch  byte
}

type MaxHeap []Item

func (h MaxHeap) Len() int            { return len(h) }
func (h MaxHeap) Less(i, j int) bool  { return h[i].cnt > h[j].cnt }
func (h MaxHeap) Swap(i, j int)       { h[i], h[j] = h[j], h[i] }
func (h *MaxHeap) Push(x interface{}) { *h = append(*h, x.(Item)) }
func (h *MaxHeap) Pop() interface{} {
	old := *h
	n := len(old)
	x := old[n-1]
	*h = old[:n-1]
	return x
}

func main() {
	in := bufio.NewReaderSize(os.Stdin, 1<<20)
	out := bufio.NewWriterSize(os.Stdout, 1<<20)
	defer out.Flush()

	var t int
	fmt.Fscan(in, &t)
	for ; t > 0; t-- {
		var n int
		var s string
		fmt.Fscan(in, &n, &s)

		cnt := make([]int, 26)
		dist := 0
		for i := 0; i < n; i++ {
			c := int(s[i] - 'a')
			if cnt[c] == 0 {
				dist++
			}
			cnt[c]++
		}

		if dist == 1 {
			fmt.Fprintln(out, s)
			continue
		}

		mx := 0
		for i := 1; i < 26; i++ {
			if cnt[i] > cnt[mx] {
				mx = i
			}
		}

		extra := 2*cnt[mx] - n - 1
		if extra < 0 {
			extra = 0
		}
		cnt[mx] -= extra

		h := &MaxHeap{}
		heap.Init(h)
		for i := 0; i < 26; i++ {
			if cnt[i] > 0 {
				heap.Push(h, Item{cnt: cnt[i], ch: byte('a' + i)})
			}
		}

		var mid strings.Builder
		mid.Grow(n - extra)
		prevCnt := 0
		var prevCh byte
		for h.Len() > 0 {
			it := heap.Pop(h).(Item)
			mid.WriteByte(it.ch)
			it.cnt--
			if prevCnt > 0 {
				heap.Push(h, Item{cnt: prevCnt, ch: prevCh})
			}
			if it.cnt > 0 {
				prevCnt = it.cnt
				prevCh = it.ch
			} else {
				prevCnt = 0
			}
		}

		var ans strings.Builder
		ans.Grow(n)
		if extra > 0 {
			ans.WriteString(strings.Repeat(string(byte('a'+mx)), extra))
		}
		ans.WriteString(mid.String())

		fmt.Fprintln(out, ans.String())
	}
}