rendered paste body/* Bartosz Kula bartosz_kula 4 109215 */
/**********************************************************************
* Project : SPOJ PLEXSORT (c) copyright
* Org : Gdansk Univeristy of Technology / ETI / group 4
* File : plexsort.cpp
* Author : student / Bartosz Kula / 109215 / bartosz_kula(at)o2.pl
* Date : 30.03.2007
* About : Sorts strings in lexicographical order
*----------------------------------------------------------------------
* History:
* ---
* Todo:
* ---
***********************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int alfabet[256];
//char tab[100001][1001];
char **tab;
int v;
int compare(const void *a, const void *b)
{
char * c = *(char**)a;
char * d = *(char**)b;
for(v=0; c[v] != 0 && d[v] != 0; v++) {
if(c[v]!=d[v]) {
return (alfabet[c[v]] - alfabet[d[v]]);
}
}
if(c[v]==0)
return -1;
if(d[v]==0)
return 1;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("input.txt","r",stdin);
//freopen("output.txt","w",stdout);
#endif
int iTest,i,n,iWierszy;
char znak;
scanf("%d\n",&iTest);
while(iTest){
n=0;
znak=getchar();
while(znak != '\n'){
alfabet[znak] = n;
n++;
znak=getchar();
}
scanf("%d\n",&iWierszy);
tab = (char**) malloc((iWierszy)*sizeof(char*));
for( i=0; i<iWierszy; i++) {
tab[i] = (char*) malloc(725*sizeof(char));
}
n=0;
for(i=0; i<iWierszy; i++) {
gets(tab[i]);
}
getc(stdin);
qsort(tab, iWierszy, sizeof(char *), compare);
v=0;
for(i=0; i<iWierszy; i++)
puts(tab[i]);
putchar('\n');
int z=0;
for(z=0;z<iWierszy;z++)
free(tab[z]);
free(tab);
iTest--;
}
return 0;
}