int cmp(const int* a, const int* b)
{
    return *b - *a; 
}

void compareAndReportStringsLength(const char* strings[], const int n)
{
    if (n > 0)
    {
        char* has_length = ;
        char* predicate_max = ;
        char* predicate_min = ;
        char* predicate_ave = ;

        int* si = malloc(2 * n * sizeof(int));
        if (si != NULL)
        {
            for (int i = 0; i < n; i++)
            {
                si[2 * i] = strlen(strings[i]);
                si[2 * i + 1] = i;
            }
            qsort(si, n, 2 * sizeof(int), cmp);

            int max = si[0];
            int min = si[2 * (n - 1)];

            for (int i = 0; i < n; i++)
            {
                int length = si[2 * i];
                char* string = strings[si[2 * i + 1]];
                char* predicate;
                if (length == max)
                    predicate = predicate_max;
                else if (length == min)
                    predicate = predicate_min;
                else
                    predicate = predicate_ave;
                printf(%s\,
                    string, has_length, length, predicate);
            }

            free(si);
        }
        else
        {
            fputs(, stderr);
        }
    }
}

int main(int argc, char* argv[])
{
    char* list[] = { , , ,  };

    compareAndReportStringsLength(list, 4);

    return EXIT_SUCCESS;
}