← Home
package main

import (
	"bufio"
	"io"
	"os"
)

type FastScanner struct {
	data []byte
	idx  int
	n    int
}

func NewFastScanner() *FastScanner {
	data, _ := io.ReadAll(os.Stdin)
	return &FastScanner{data: data, n: len(data)}
}

func (fs *FastScanner) skipSpaces() {
	for fs.idx < fs.n {
		b := fs.data[fs.idx]
		if b > ' ' {
			break
		}
		fs.idx++
	}
}

func (fs *FastScanner) NextInt() int {
	fs.skipSpaces()
	sign := 1
	if fs.data[fs.idx] == '-' {
		sign = -1
		fs.idx++
	}
	val := 0
	for fs.idx < fs.n {
		b := fs.data[fs.idx]
		if b < '0' || b > '9' {
			break
		}
		val = val*10 + int(b-'0')
		fs.idx++
	}
	return val * sign
}

func (fs *FastScanner) NextString() string {
	fs.skipSpaces()
	start := fs.idx
	for fs.idx < fs.n && fs.data[fs.idx] > ' ' {
		fs.idx++
	}
	return string(fs.data[start:fs.idx])
}

func main() {
	fs := NewFastScanner()
	out := bufio.NewWriterSize(os.Stdout, 1<<20)
	defer out.Flush()

	t := fs.NextInt()
	for ; t > 0; t-- {
		n := fs.NextInt()
		k := fs.NextInt()
		s := fs.NextString()
		ans := make([]byte, n)

		if k%2 == 0 {
			var cnt [26]int
			for i := 0; i < n; i++ {
				cnt[s[i]-'a']++
			}
			p := 0
			for c := 0; c < 26; c++ {
				for cnt[c] > 0 {
					ans[p] = byte(c) + 'a'
					p++
					cnt[c]--
				}
			}
		} else {
			var cnt0, cnt1 [26]int
			for i := 0; i < n; i++ {
				if i%2 == 0 {
					cnt0[s[i]-'a']++
				} else {
					cnt1[s[i]-'a']++
				}
			}
			a0 := make([]byte, 0, (n+1)/2)
			a1 := make([]byte, 0, n/2)
			for c := 0; c < 26; c++ {
				for cnt0[c] > 0 {
					a0 = append(a0, byte(c)+'a')
					cnt0[c]--
				}
				for cnt1[c] > 0 {
					a1 = append(a1, byte(c)+'a')
					cnt1[c]--
				}
			}
			i0, i1 := 0, 0
			for i := 0; i < n; i++ {
				if i%2 == 0 {
					ans[i] = a0[i0]
					i0++
				} else {
					ans[i] = a1[i1]
					i1++
				}
			}
		}

		out.Write(ans)
		out.WriteByte('\n')
	}
}