#include <stdio.h>
#include <string.h>
void mergeSort(int a[],int,int);
void merge(int a[],int,int,int);
int main() {
int T;
while (T--) {
int a[100];
int N,count=0;
for (int i = 0; i < N; i++) {
}
mergeSort(a,0,N-1);
for (int i=0; i<N; i++) {
if (a[i] != a[i+1]) {
count++;
}
}
}
return 0;
}
void mergeSort(int a[],int l,int r){
if (l<r) {
int mid = (l+r)/2;
mergeSort(a, 0, mid);
mergeSort(a,mid+1,r);
merge(a, l, mid, r);
}
}
void merge(int arr[],int l,int m,int r){
int i, j, k;
int n1 = m - l + 1;
int n2 = r - m;
/* create temp arrays */
int L[n1], R[n2];
/* Copy data to temp arrays L[] and R[] */
for (i = 0; i < n1; i++)
L[i] = arr[l + i];
for (j = 0; j < n2; j++)
R[j] = arr[m + 1+ j];
/* Merge the temp arrays back into arr[l..r]*/
i = 0; // Initial index of first subarray
j = 0; // Initial index of second subarray
k = l; // Initial index of merged subarray
while (i < n1 && j < n2)
{
if (L[i] <= R[j])
{
arr[k] = L[i];
i++;
}
else
{
arr[k] = R[j];
j++;
}
k++;
}
/* Copy the remaining elements of L[], if there
are any */
while (i < n1)
{
arr[k] = L[i];
i++;
k++;
}
/* Copy the remaining elements of R[], if there
are any */
while (j < n2)
{
arr[k] = R[j];
j++;
k++;
}
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCnZvaWQgbWVyZ2VTb3J0KGludCBhW10saW50LGludCk7CnZvaWQgbWVyZ2UoaW50IGFbXSxpbnQsaW50LGludCk7CmludCBtYWluKCkgewogICAgaW50IFQ7CiAgICBzY2FuZigiJWQiLCZUKTsKICAgIHdoaWxlIChULS0pIHsKICAgICAgICBpbnQgYVsxMDBdOwogICAgICAgIGludCBOLGNvdW50PTA7CiAgICAgICAgc2NhbmYoIiVkIiwmTik7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspIHsKICAgICAgICAgICAgc2NhbmYoIiVkIiwmYVtpXSk7CiAgICAgICAgfQogICAgICAgIG1lcmdlU29ydChhLDAsTi0xKTsKICAgICAgICBmb3IgKGludCBpPTA7IGk8TjsgaSsrKSB7CiAgICAgICAgICAgIGlmIChhW2ldICE9IGFbaSsxXSkgewogICAgICAgICAgICAgICAgY291bnQrKzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICAgICAgcHJpbnRmKCIlZFxuIixjb3VudCk7CiAgICB9CiAgICByZXR1cm4gMDsKfQoKdm9pZCBtZXJnZVNvcnQoaW50IGFbXSxpbnQgbCxpbnQgcil7CiAgICBpZiAobDxyKSB7CiAgICAgICAgaW50IG1pZCA9IChsK3IpLzI7CiAgICAgICAgbWVyZ2VTb3J0KGEsIDAsIG1pZCk7CiAgICAgICAgbWVyZ2VTb3J0KGEsbWlkKzEscik7CiAgICAgICAgbWVyZ2UoYSwgbCwgbWlkLCByKTsKICAgIH0KfQoKdm9pZCBtZXJnZShpbnQgYXJyW10saW50IGwsaW50IG0saW50IHIpewogICAgCmludCBpLCBqLCBrOwppbnQgbjEgPSBtIC0gbCArIDE7CmludCBuMiA9ICByIC0gbTsKCi8qIGNyZWF0ZSB0ZW1wIGFycmF5cyAqLwppbnQgTFtuMV0sIFJbbjJdOwoKLyogQ29weSBkYXRhIHRvIHRlbXAgYXJyYXlzIExbXSBhbmQgUltdICovCmZvciAoaSA9IDA7IGkgPCBuMTsgaSsrKQpMW2ldID0gYXJyW2wgKyBpXTsKZm9yIChqID0gMDsgaiA8IG4yOyBqKyspClJbal0gPSBhcnJbbSArIDErIGpdOwoKLyogTWVyZ2UgdGhlIHRlbXAgYXJyYXlzIGJhY2sgaW50byBhcnJbbC4ucl0qLwppID0gMDsgLy8gSW5pdGlhbCBpbmRleCBvZiBmaXJzdCBzdWJhcnJheQpqID0gMDsgLy8gSW5pdGlhbCBpbmRleCBvZiBzZWNvbmQgc3ViYXJyYXkKayA9IGw7IC8vIEluaXRpYWwgaW5kZXggb2YgbWVyZ2VkIHN1YmFycmF5CndoaWxlIChpIDwgbjEgJiYgaiA8IG4yKQp7CiAgICBpZiAoTFtpXSA8PSBSW2pdKQogICAgewogICAgICAgIGFycltrXSA9IExbaV07CiAgICAgICAgaSsrOwogICAgfQogICAgZWxzZQogICAgewogICAgICAgIGFycltrXSA9IFJbal07CiAgICAgICAgaisrOwogICAgfQogICAgaysrOwp9CgovKiBDb3B5IHRoZSByZW1haW5pbmcgZWxlbWVudHMgb2YgTFtdLCBpZiB0aGVyZQogYXJlIGFueSAqLwp3aGlsZSAoaSA8IG4xKQp7CiAgICBhcnJba10gPSBMW2ldOwogICAgaSsrOwogICAgaysrOwp9CgovKiBDb3B5IHRoZSByZW1haW5pbmcgZWxlbWVudHMgb2YgUltdLCBpZiB0aGVyZQogYXJlIGFueSAqLwp3aGlsZSAoaiA8IG4yKQp7CiAgICBhcnJba10gPSBSW2pdOwogICAgaisrOwogICAgaysrOwp9Cn0K