#include #include using namespace std; #define LEFT 1 #define UP 2 #define SIKMO 3 struct Prvek{ int c; int smer; }; int main () { char p1[1000][11]; char p2[1000][11]; char sl[11]; Prvek pr[1001][1001]; int c1, c2; cin >> sl; while(true) { while(strcmp(sl,".")) { strcpy(p1[++c1],sl); cin >> sl; } cin >> sl; while(strcmp(sl,".")) { strcpy(p2[++c2], sl); cin >> sl; } for (int i = 1; i <= c1; i++) { for (int j = 1; j <= c2; j++) { pr[i][j].c = max(pr[i-1][j].c,pr[i][j-1].c); if (strcmp(p1[i],p2[j])==0) { pr[i][j].c++; pr[i][j].smer = SIKMO; } if (pr[i-1][j].c <= pr[i][j-1].c) { pr[i][j].smer = LEFT; } else pr[i][j].smer = UP; } } while (c1>0 && c2>0) { if (pr[c1][c2].smer == LEFT) cout << p2[c2--]; else if (pr[c1][c2].smer == UP) cout << p1[c1--]; else { cout << p2[c2--]; c1--; } } cin >> sl; if(!strcmp(sl, ".")) return 0; } return 0; }