← Home
package main

import (
	"bufio"
	"os"
	"strconv"
)

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Split(bufio.ScanWords)
	
	buffer := make([]byte, 1024*1024)
	scanner.Buffer(buffer, 1024*1024)

	writer := bufio.NewWriter(os.Stdout)
	defer writer.Flush()

	scanInt := func() int {
		scanner.Scan()
		res, _ := strconv.Atoi(scanner.Text())
		return res
	}

	if !scanner.Scan() {
		return
	}
	t, _ := strconv.Atoi(scanner.Text())

	for i := 0; i < t; i++ {
		n := scanInt()
		k := scanInt()

		pos := make([][]int, n+1)
		for j := 0; j < n; j++ {
			val := scanInt()
			pos[val] = append(pos[val], j)
		}

		ans := make([]int, n)
		infreq := make([]int, 0, n)

		for j := 1; j <= n; j++ {
			if len(pos[j]) >= k {
				for c := 0; c < k; c++ {
					ans[pos[j][c]] = c + 1
				}
			} else if len(pos[j]) > 0 {
				infreq = append(infreq, pos[j]...)
			}
		}

		m := len(infreq)
		m -= m % k

		for j := 0; j < m; j++ {
			ans[infreq[j]] = (j % k) + 1
		}

		for j := 0; j < n; j++ {
			writer.WriteString(strconv.Itoa(ans[j]))
			if j < n-1 {
				writer.WriteByte(' ')
			}
		}
		writer.WriteByte('\n')
	}
}