#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; string dp[2505][51]; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int N; cin >> N; vectorS(N); for(int i = 0; i < N; i++) { cin >> S[i]; } string ans = S[0]; for(int i = 1; i < N; i++) { for(int j = 0; j <= ans.size(); j++) { for(int k = 0; k <= S[i].size(); k++) { dp[j][k] = string(j+k,'z'); } } for(int j = 0; j <= ans.size(); j++) { for(int k = 0; k <= S[i].size(); k++) { if(j == ans.size()) { if(k == S[i].size()) { break; } else { dp[j][k+1] = min(dp[j][k+1],dp[j][k]+S[i][k]); } } else if(k == S[i].size()) { dp[j+1][k] = min(dp[j+1][k],dp[j][k]+ans[j]); } else { dp[j+1][k] = min(dp[j+1][k],dp[j][k]+ans[j]); dp[j][k+1] = min(dp[j][k+1],dp[j][k]+S[i][k]); } } } ans = dp[ans.size()][S[i].size()]; } cout << ans << "\n"; }