#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define BET(a,b,c) ((a)<=(b)&&(b)<(c)) #define FOR(i,n) for(int i=0,i##_end=(int(n));i VI; typedef vector VVI; string memo[2510][55]; string dfs(const string&s1, const string&s2, int p1, int p2){ string& ret = memo[p1][p2]; if(ret != "") return ret; if(p1 < SZ(s1) && p2 < SZ(s2)){ if(s1[p1] < s2[p2]){ ret = s1[p1] + dfs(s1, s2, p1+1, p2); } if(s1[p1] > s2[p2]){ ret = s2[p2] + dfs(s1, s2, p1, p2+1); } if(s1[p1] == s2[p2]){ string a = s1[p1] + dfs(s1, s2, p1+1, p2); string b = s2[p2] + dfs(s1, s2, p1, p2+1); ret = min(a, b); } }else if(p1 < SZ(s1)){ ret = s1[p1] + dfs(s1, s2, p1+1, p2); }else if(p2 < SZ(s2)){ ret = s2[p2] + dfs(s1, s2, p1, p2+1); } return ret; } string merge(string s1, string s2){ FOR(i,SZ(s1)+1) FOR(j,SZ(s2)+1) { memo[i][j] = ""; } return dfs(s1, s2, 0, 0); } int main() { int n; cin>>n; assert(1 <= n && n <= 50); vector s(n); FOR(i,n) { cin>>s[i]; } string ans = s[0]; for(int i=1;i