#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; //#define FOR(i,a,b) for(int i = (a); i < (b); ++i) #define FOR2(i,a,b) for(int i = (a); i > (b); --i) #define FOR(i,b) for(int i = 0; i < (b); ++i) #define FORTO(i,a,b) for(int i = (a); i <= (b); ++i) #define FORD(i,b) for(int i = (b)-1; i >= 0; --i) #define FOREACH(it,a) for(typeof((a).begin()) it = (a).begin(); it != (a).end(); ++it) #define $(x) int((x).size()) #define MAX 2047 int F[MAX][MAX]; char A[MAX][12]; char B[MAX][12]; int main() { while (true) { int N = 0, M = 0; do scanf("%s", A[N]); while (A[N++][0] != '.'); if (A[0][0] == '.') return 0; do scanf("%s", B[M]); while (B[M++][0] != '.'); FOR(i,MAX) FOR(j,MAX) F[i][j] = 100000; F[N][M] = 0; FORD(a,N) { FORD(b,M) { int val = strcmp(A[a],B[b]); if (val == 0) { F[a][b] = F[a+1][b+1]+1; } else { F[a][b] = min(F[a+1][b],F[a][b+1]) + 1; } } } int Min = F[0][0]; // printf("%d\n", Min); int a = 0, b = 0; FOR(i,Min-1) { int val = strcmp(A[a],B[b]); if (val == 0) { printf("%s ", A[a]); a++, b++; } else if (F[a+1][b] == F[a][b+1]) { if (val < 0) printf("%s ", A[a++]); if (val > 0) printf("%s ", B[b++]); } else if (F[a+1][b] < F[a][b+1]) { printf("%s ", A[a++]); } else if (F[a+1][b] > F[a][b+1]) { printf("%s ", B[b++]); } } printf(".\n"); } return 0; }