import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeMap;
public class Main {
public static void main
(String[] args
) { try {
int t
= Integer.
parseInt(br.
readLine()); int n = 0, k = 0;
Integer value
= 0, reqCnt
= 0, demand
= 0; TreeMap
<String, Integer
> table
= new TreeMap
<String, Integer
>(); HashMap
<Integer, Integer
> reqCntTable
= new HashMap
<Integer, Integer
>();
for (int i = 0; i < t; i++) {
reqCntTable.clear();
table.clear();
data = br.readLine().split(" ");
data = br.readLine().split(" ");
if (k == 1) {
continue;
}
for (int j = 0; j < n; j++) {
key = data[j].trim();
value = table.get(key);
if (value == null) {
value = 0;
}
value++;
value = value % k;
table.put(key, value);
}
Collection<Integer> boquey = table.values();
ArrayList<Integer> heights = new ArrayList<Integer>(boquey);
int hlen=heights.size();
while(iterator.hasNext()){
keyStr
=(String) iterator.
next(); demand = (k -table.get(keyStr));
reqCnt = reqCntTable.get(demand);
if (reqCnt == null) {
reqCnt = 1;
}else{
reqCnt++;
}
reqCntTable.put(demand, reqCnt);
}
long result = 0L;
int len = heights.size();
int freePool = 0, cpool = 0;
int j = 0;
int bqCnt=0;
int reqAux = 0;
for (j = len - 1; j > 0; j--) {
cpool = heights.get(j);
reqAux = k - cpool;
available = reqCntTable.get(cpool);
if ((available != null) && (available >0)) {
int index=heights.indexOf(reqAux);
heights.set(index, 0);
result+=cpool;
available--;
reqCntTable.put(cpool, available);
reqAux = k - cpool;
available = reqCntTable.get(reqAux);
available--;
reqCntTable.put(reqAux, available);
}else{
freePool += cpool;
bqCnt=freePool/k;
freePool=freePool%k;
result+=(k-1)*bqCnt;
}
}
bqCnt=freePool/k;
freePool=freePool%k;
result+=(k-1)*bqCnt;
result += freePool;
table.clear();
}
}
}
}
ICAgIGltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOwogICAgaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiAgICBpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKICAgIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogICAgaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwogICAgaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwogICAgaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKICAgIGltcG9ydCBqYXZhLnV0aWwuU2V0OwogICAgaW1wb3J0IGphdmEudXRpbC5UcmVlTWFwOwogICAgIAogICAgcHVibGljIGNsYXNzIE1haW4gewogICAgIAogICAgCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgIAkJdHJ5IHsKICAgIAkJCUJ1ZmZlcmVkUmVhZGVyIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihTeXN0ZW0uaW4pKTsKICAgIAkJCWludCB0ID0gSW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKICAgIAkJCWludCBuID0gMCwgayA9IDA7CiAgICAJCQlTdHJpbmcga2V5ID0gbnVsbDsKICAgIAkJCUludGVnZXIgdmFsdWUgPSAwLCByZXFDbnQgPSAwLCBkZW1hbmQgPSAwOwogICAgCQkJVHJlZU1hcDxTdHJpbmcsIEludGVnZXI+IHRhYmxlID0gbmV3IFRyZWVNYXA8U3RyaW5nLCBJbnRlZ2VyPigpOwogICAgCQkJSGFzaE1hcDxJbnRlZ2VyLCBJbnRlZ2VyPiByZXFDbnRUYWJsZSA9IG5ldyBIYXNoTWFwPEludGVnZXIsIEludGVnZXI+KCk7CiAgICAJCQlTdHJpbmcgZGF0YVtdID0gbnVsbDsKICAgICAKICAgIAkJCWZvciAoaW50IGkgPSAwOyBpIDwgdDsgaSsrKSB7CiAgICAJCQkJcmVxQ250VGFibGUuY2xlYXIoKTsKICAgIAkJCQl0YWJsZS5jbGVhcigpOwogICAgCQkJCWRhdGEgPSBici5yZWFkTGluZSgpLnNwbGl0KCIgIik7CiAgICAJCQkJbiA9IEludGVnZXIucGFyc2VJbnQoZGF0YVswXSk7CiAgICAJCQkJayA9IEludGVnZXIucGFyc2VJbnQoZGF0YVsxXSk7CiAgICAgCiAgICAJCQkJZGF0YSA9IGJyLnJlYWRMaW5lKCkuc3BsaXQoIiAiKTsKICAgIAkJCQlpZiAoayA9PSAxKSB7CiAgICAJCQkJCVN5c3RlbS5vdXQucHJpbnRsbigwKTsKICAgIAkJCQkJY29udGludWU7CiAgICAJCQkJfQogICAgCQkJCWZvciAoaW50IGogPSAwOyBqIDwgbjsgaisrKSB7CiAgICAJCQkJCWtleSA9IGRhdGFbal0udHJpbSgpOwogICAgCQkJCQl2YWx1ZSA9IHRhYmxlLmdldChrZXkpOwogICAgCQkJCQlpZiAodmFsdWUgPT0gbnVsbCkgewogICAgCQkJCQkJdmFsdWUgPSAwOwogICAgIAogICAgCQkJCQl9CiAgICAJCQkJCXZhbHVlKys7CiAgICAJCQkJCXZhbHVlID0gdmFsdWUgJSBrOwogICAgCQkJCQl0YWJsZS5wdXQoa2V5LCB2YWx1ZSk7CiAgICAgCiAgICAgCiAgICAJCQkJfQogICAgCQkJCUNvbGxlY3Rpb248SW50ZWdlcj4gYm9xdWV5ID0gdGFibGUudmFsdWVzKCk7CiAgICAJCQkJQXJyYXlMaXN0PEludGVnZXI+IGhlaWdodHMgPSBuZXcgQXJyYXlMaXN0PEludGVnZXI+KGJvcXVleSk7CiAgICAJCQkJaW50IGhsZW49aGVpZ2h0cy5zaXplKCk7CiAgICAgCiAgICAJCQkJU2V0IGtleXM9dGFibGUua2V5U2V0KCk7CiAgICAJCQkJSXRlcmF0b3IgaXRlcmF0b3I9a2V5cy5pdGVyYXRvcigpOwogICAgCQkJCVN0cmluZyBrZXlTdHI9IiI7CiAgICAgCiAgICAJCQkJd2hpbGUoaXRlcmF0b3IuaGFzTmV4dCgpKXsKICAgIAkJCQkJa2V5U3RyPShTdHJpbmcpIGl0ZXJhdG9yLm5leHQoKTsKICAgIAkJCQkJZGVtYW5kID0gKGsgLXRhYmxlLmdldChrZXlTdHIpKTsKICAgIAkJCQkJcmVxQ250ID0gcmVxQ250VGFibGUuZ2V0KGRlbWFuZCk7CiAgICAJCQkJCWlmIChyZXFDbnQgPT0gbnVsbCkgewogICAgCQkJCQkJcmVxQ250ID0gMTsKICAgIAkJCQkJfWVsc2V7CiAgICAJCQkJCQlyZXFDbnQrKzsKICAgIAkJCQkJfQogICAgCQkJCQlyZXFDbnRUYWJsZS5wdXQoZGVtYW5kLCByZXFDbnQpOwogICAgCQkJCX0KICAgICAKICAgICAKICAgIAkJCQlsb25nIHJlc3VsdCA9IDBMOwogICAgCQkJCWludCBsZW4gPSBoZWlnaHRzLnNpemUoKTsKICAgIAkJCQlpbnQgZnJlZVBvb2wgPSAwLCBjcG9vbCA9IDA7CiAgICAJCQkJSW50ZWdlciBhdmFpbGFibGUgPSAwOwogICAgCQkJCWludCBqID0gMDsKICAgIAkJCQlpbnQgYnFDbnQ9MDsKICAgIAkJCQlpbnQgcmVxQXV4ID0gMDsKICAgICAKICAgIAkJCQlmb3IgKGogPSBsZW4gLSAxOyBqID4gMDsgai0tKSB7CiAgICAJCQkJCWNwb29sID0gaGVpZ2h0cy5nZXQoaik7CiAgICAJCQkJCXJlcUF1eCA9IGsgLSBjcG9vbDsKICAgIAkJCQkJYXZhaWxhYmxlID0gcmVxQ250VGFibGUuZ2V0KGNwb29sKTsKICAgIAkJCQkJaWYgKChhdmFpbGFibGUgIT0gbnVsbCkgJiYgKGF2YWlsYWJsZSA+MCkpIHsKICAgIAkJCQkJCWludCBpbmRleD1oZWlnaHRzLmluZGV4T2YocmVxQXV4KTsKICAgIAkJCQkJCWhlaWdodHMuc2V0KGluZGV4LCAwKTsKICAgIAkJCQkJCXJlc3VsdCs9Y3Bvb2w7CiAgICAJCQkJCQlhdmFpbGFibGUtLTsKICAgIAkJCQkJCXJlcUNudFRhYmxlLnB1dChjcG9vbCwgYXZhaWxhYmxlKTsKICAgIAkJCQkJCXJlcUF1eCA9IGsgLSBjcG9vbDsKICAgIAkJCQkJCWF2YWlsYWJsZSA9IHJlcUNudFRhYmxlLmdldChyZXFBdXgpOwogICAgCQkJCQkJYXZhaWxhYmxlLS07CiAgICAJCQkJCQlyZXFDbnRUYWJsZS5wdXQocmVxQXV4LCBhdmFpbGFibGUpOwogICAgCQkJCQl9ZWxzZXsKICAgIAkJCQkJCWZyZWVQb29sICs9IGNwb29sOwogICAgCQkJCQkJYnFDbnQ9ZnJlZVBvb2wvazsKICAgIAkJCQkJCWZyZWVQb29sPWZyZWVQb29sJWs7CiAgICAJCQkJCQlyZXN1bHQrPShrLTEpKmJxQ250OwogICAgCQkJCQl9CiAgICAJCQkJfQogICAgIAogICAgCQkJCWJxQ250PWZyZWVQb29sL2s7CiAgICAJCQkJZnJlZVBvb2w9ZnJlZVBvb2wlazsKICAgIAkJCQlyZXN1bHQrPShrLTEpKmJxQ250OwogICAgIAogICAgCQkJCXJlc3VsdCArPSBmcmVlUG9vbDsKICAgIAkJCQl0YWJsZS5jbGVhcigpOwogICAgCQkJCVN5c3RlbS5vdXQucHJpbnRsbihyZXN1bHQpOwogICAgCQkJfQogICAgCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBleCkgewogICAgCQl9CiAgICAgCiAgICAJfQogICAgIAogICAgfSA=