/*
* 解题思路:
* 题意虽不难理解、但一定要读清楚!
* 它匹配过程中、是允许一个字符串重复匹配上一个字符串的、就好比说例子 banana boat , 在bab匹配ban的过程中
* 第一步是 将原字符串变成 babana boat 、第二步是 将第一步产生的字符串变成 bababa boat
*/
#include <stdio.h> #include <string.h> #define A 300 int n,p; char s[ A ][ A ]; char ss1[ A ] , ss2[ A ]; int find( int x ,char a[ ]) { int i,j; int len1 = strlen( s[ x ] ) , len2 = strlen( a ); int p; for( i=0;i<len2;i++ ) { p = i; for( j=0;j<len1;j++ ,p++) if( a[ p ] != s[ x ][ j ] ) break; if( j == len1 ) return i; } return -1; } void edit( char a[] , char b[] ,int j ,int pos ) { int i,k,p; int tmp; for( i=0;i<pos;i++ ) a[ i ] = b[ i ]; tmp = i; for( k = 0; k< strlen( s[ j+1 ] ) ;k++ ) a[ i++ ] = s[ j+1 ][ k ]; p = i; for( i=tmp+strlen( s[ j ] ) ; i< strlen( b ) ;i++ ) a[ p++ ] = b[ i ]; a[ p ] =‘\0‘; } int main( ) { int i,j,k; int pos,flag; char c; while( scanf("%d",&n) && n ) { getchar( ); memset(s , ‘\0‘ , sizeof( s ) ); memset( ss1 ,‘\0‘,sizeof( ss1 ) ); memset( ss2, ‘\0‘,sizeof( ss2 ) ); for( i=0;i<2*n+1;i++,p=0) while(( c = getchar( ) ) !=‘\n‘ ) s[ i ][ p++ ] = c; flag = 1; strcpy( ss1 , s[ 2*n ] ); for( j = 0;j<2*n ; j+=2 ) while( 1 ) if( flag == 1 ) { pos = find( j , ss1 ); if( pos == -1 ) break; edit( ss2 , ss1 , j , pos ); flag = 2; } else if( flag == 2 ) { pos = find( j , ss2 ); if( pos == -1 ) break; edit( ss1 , ss2 , j ,pos ); flag = 1; } flag == 1 ? printf("%s\n",ss1) : printf("%s\n",ss2); } return 0; }