#include <stdio.h> #include <stdlib.h> #include <string.h> char founded[70000][31]; void quick_sort(int left,int right) { int i=left,j=right; char pivot[31]; int k; for (k=0;k<strlen(founded[(int)((i+j)/2)]);k++) { pivot[k]=founded[(int)((i+j)/2)][k]; } pivot[strlen(founded[(int)((i+j)/2)])]='\0'; while (i<=j) { while (strcmp(founded[i],pivot)<-1) { i++; } while (strcmp(founded[j],pivot)>1) { j--; } if (i<=j) { char temp[31]; for (k=0;k<strlen(founded[i]);k++) { temp[k]=founded[i][k]; } temp[strlen(founded[i])]='\0'; for (k=0;k<strlen(founded[j]);k++) { founded[i][k]=founded[j][k]; } founded[i][strlen(founded[j])]='\0'; for (k=0;k<strlen(temp);k++) { founded[j][k]=temp[k]; } founded[j][strlen(temp)]='\0'; i++; j--; } if (left<j) { quick_sort(left,j); } if (i>right) { quick_sort(i,right); } } } void insert(char c,char* s,int k) { int i; for (i=strlen(s)+1;i>=k+1;i--) { s[i]=s[i-1]; } s[i]=c; } char * letters(char* s) { int i; char let[30]; let[0]='\0'; for (i=0;i<strlen(s);i++) { int j=0; while ((j<strlen(let)) && (let[i]<s[i])) { j++; } insert(s[i],let,j); } return let; } int main() { char sequence[30]; scanf("%s",sequence); char word[10000][30]; int n; scanf("%d",&n); int i; for (i=0;i<n;i++) { scanf("%s",word[i]); } int nr=0; for (i=0;i<n;i++) { int j; for (j=0;j<strlen(sequence)-strlen(word[i])+1;j++) { int k; char temp[31]; for (k=0;k<strlen(word[i]);k++) { temp[k]=sequence[j+k]; } temp[strlen(word[i])]='\0'; if (strcmp(temp,word[i])==0) { for (k=0;k<strlen(word[i]);k++) { founded[nr][k]=word[i][k]; } founded[nr][strlen(word[i])]='\0'; nr++; } } } quick_sort(0,nr-1); for (i=0;i<nr;i++) { printf("%s\n",founded[i]); } return 0; }