/*
TASK:ABC
LANG:C
*/
#include <stdio.h>
#include <string.h>

    char pries[256][256] = {0}; /* pries[i][j] = 1, 
                                   jei raidė i eina prieš j       */

    int  yra_sarase[256] = {0}; /* ar raidė i yra sąraše (grafe)? */

    int  kiek_pries[256] = {0}; /* kiek prieš šią raidę eina 
                                   raidžių (kiek ieinančių 
                                   lankų į viršūnę grafe)?        */

    int  N;                     /* žodžių skaičius sčraše         */
    int  raidziu_sk = 0;        /* kiek raidžių abėcėlėje?        */

int main(void)
{
    FILE *f;
    unsigned char z1[10] = {0}, z2[10] = {0};
    int  m_ilgis, i, j, c, rasta;

    f = fopen("ABC.DAT", "r");
    fscanf(f, "%d\n", &N);
    for (j = 0; j < N; j++) {
         fscanf(f, "%s\n", z1);
         for (i = 0; i < strlen((char *)z1); i++) /* ar radom naujų raidžių? */
             if (!yra_sarase[z1[i]]) {
                 yra_sarase[z1[i]] = 1;
                 raidziu_sk++;
             }
         m_ilgis = strlen((char *)z1) < strlen((char *)z2) ?
                   strlen((char *)z1) : strlen((char *)z2);
         i = 0;
         while ((i < m_ilgis) && (z1[i] == z2[i])) i++;
         if (i < m_ilgis)          /* vadinasi, z1[i] != z2[i] -
                                      raidė z2[i] "eina" prieš z1[i] */
             if (!pries[z2[i]][z1[i]]) {
                 pries[z2[i]][z1[i]] = 1;
                 kiek_pries[z1[i]]++;
             }
        
         strcpy((char *)z2, (char *)z1);           /* z2 := z1 */
    }
    fclose(f);

    f = fopen("ABC.REZ", "w");
    for (i = 0; i < raidziu_sk; i++) {
        c = 0;
        while (!yra_sarase[c] || (kiek_pries[c] > 0)) c++;
        fprintf(f, "%c", (char) c);
        yra_sarase[c] = 0;
        for (j = 0; j < 256; j++)
            if (pries[c][j]) kiek_pries[j]--;
    }
    fclose(f);

    return 0;
}


