import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collection;
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;
TreeMap
<String, Integer
> table
= new TreeMap
<String, Integer
>();
for (int i = 0; i < t; i++) {
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);
long result = 0L;
int len=heights.size();
int req=0;
int freePool=heights.get(len-1);
int j=0;
for( j=len-1;j>=0;j--){
if(heights.get(j)!=0){
freePool=heights.get(j);
break;
}
}
j--;
int current=0;
int limit=0;
for( ;j>0;j--){
if(heights.get(j)==0){
continue;
}
current=heights.get(j);
req=k-current;
limit=k/2;
if(k%2!=0){
limit++;
}
if(req<=freePool&¤t>=limit){
result+=req;
freePool-=req;
}else{
freePool+=current;
}
}
result+=freePool;
table.clear();
}
}
}
}
aW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CmltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwppbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CmltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKaW1wb3J0IGphdmEudXRpbC5UcmVlTWFwOwogCnB1YmxpYyBjbGFzcyBNYWluIHsKIAoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewoJCXRyeSB7CgkJCUJ1ZmZlcmVkUmVhZGVyIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihTeXN0ZW0uaW4pKTsKCQkJaW50IHQgPSBJbnRlZ2VyLnBhcnNlSW50KGJyLnJlYWRMaW5lKCkpOwoJCQlpbnQgbiA9IDAsIGsgPSAwOwoJCQlTdHJpbmcga2V5ID0gbnVsbDsKCQkJSW50ZWdlciB2YWx1ZSA9IDA7CgkJCVRyZWVNYXA8U3RyaW5nLCBJbnRlZ2VyPiB0YWJsZSA9IG5ldyBUcmVlTWFwPFN0cmluZywgSW50ZWdlcj4oKTsKCQkJU3RyaW5nIGRhdGFbXSA9IG51bGw7CiAKCQkJZm9yIChpbnQgaSA9IDA7IGkgPCB0OyBpKyspIHsKCQkJCQoJCQkJZGF0YSA9IGJyLnJlYWRMaW5lKCkuc3BsaXQoIiAiKTsKCQkJCW4gPSBJbnRlZ2VyLnBhcnNlSW50KGRhdGFbMF0pOwoJCQkJayA9IEludGVnZXIucGFyc2VJbnQoZGF0YVsxXSk7CiAKCQkJCWRhdGEgPSBici5yZWFkTGluZSgpLnNwbGl0KCIgIik7CgkJCQlpZihrPT0xKXsKCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oMCk7CgkJCQkJY29udGludWU7CgkJCQl9CgkJCQlmb3IgKGludCBqID0gMDsgaiA8IG47IGorKykgewoJCQkJCWtleSA9ZGF0YVtqXS50cmltKCk7CgkJCQkJdmFsdWUgPSB0YWJsZS5nZXQoa2V5KTsKCQkJCQlpZiAodmFsdWUgPT0gbnVsbCkgewoJCQkJCQl2YWx1ZSA9IDA7CiAKCQkJCQl9CgkJCQkJdmFsdWUrKzsKCQkJCQl2YWx1ZSA9IHZhbHVlICUgazsKCQkJCQl0YWJsZS5wdXQoa2V5LCB2YWx1ZSk7CiAKCQkJCX0KCQkJCUNvbGxlY3Rpb248SW50ZWdlcj4gYm9xdWV5ID0gdGFibGUudmFsdWVzKCk7CgkJCQlBcnJheUxpc3Q8SW50ZWdlcj4gaGVpZ2h0cyA9IG5ldyBBcnJheUxpc3Q8SW50ZWdlcj4oYm9xdWV5KTsKCQkJCQoJCQkJbG9uZyByZXN1bHQgPSAwTDsKCQkJCWludCBsZW49aGVpZ2h0cy5zaXplKCk7CgkJCQlpbnQgcmVxPTA7CgkJCQlpbnQgZnJlZVBvb2w9aGVpZ2h0cy5nZXQobGVuLTEpOwoJCQkJaW50IGo9MDsKCQkJCWZvciggaj1sZW4tMTtqPj0wO2otLSl7CgkJCQkJaWYoaGVpZ2h0cy5nZXQoaikhPTApewoJCQkJCQlmcmVlUG9vbD1oZWlnaHRzLmdldChqKTsKCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJfQoJCQkJai0tOwoJCQkJaW50IGN1cnJlbnQ9MDsKCQkJCWludCBsaW1pdD0wOwoJCQkJZm9yKCA7aj4wO2otLSl7CgkJCQkJaWYoaGVpZ2h0cy5nZXQoaik9PTApewoJCQkJCQljb250aW51ZTsKCQkJCQl9CgkJCQkJY3VycmVudD1oZWlnaHRzLmdldChqKTsKCQkJCQlyZXE9ay1jdXJyZW50OwoJCQkJCWxpbWl0PWsvMjsKCQkJCQlpZihrJTIhPTApewoJCQkJCQlsaW1pdCsrOwoJCQkJCX0KCQkJCQlpZihyZXE8PWZyZWVQb29sJiZjdXJyZW50Pj1saW1pdCl7CgkJCQkJCXJlc3VsdCs9cmVxOwoJCQkJCQlmcmVlUG9vbC09cmVxOwoJCQkJCX1lbHNlewoJCQkJCQlmcmVlUG9vbCs9Y3VycmVudDsKCQkJCQl9CgkJCQl9CgkJCQlyZXN1bHQrPWZyZWVQb29sOwoJCQkJdGFibGUuY2xlYXIoKTsKCQkJCVN5c3RlbS5vdXQucHJpbnRsbihyZXN1bHQpOwoJCQl9CgkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZXgpIHsKCQl9CiAKCX0KIAp9IA==