/* index3.c: Print unique tokens from standard input */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAXWIDTH  32
#define MAXTOKENS 1024

static int comp(const void *, const void *);

static char tokens[MAXTOKENS][MAXWIDTH];

main()
{
    size_t i, n;
    size_t idx[MAXTOKENS];
    char *last;
    char *format = "%*[^A-Za-z0-9]%[A-Za-z0-9]";

    /* Read tokens & initialize index array */
    for (n = 0; n < MAXTOKENS &&
                scanf(format,tokens[n]) != EOF; ++n)
        idx[n] = n;

    qsort(idx,n,sizeof(idx[0]),comp);

    /* Output only unique tokens */
    puts((last = tokens[idx[0]]));
    for (i = 1; i < n; ++i)
        if (strcmp(tokens[idx[i]],last) != 0)
            puts((last = tokens[idx[i]]));
    return 0;
}

static int comp(const void *p1, const void *p2)
{
    size_t i = * (size_t *) p1;
    size_t j = * (size_t *) p2;

    return strcmp(tokens[i],tokens[j]);
}

