#include #define rep(i,n) for(int i = 0; i < (n); i++) using namespace std; typedef long long ll; int main(){ cin.tie(0); ios::sync_with_stdio(0); int H,W; cin >> H >> W; vector S(H); rep(i,H) cin >> S[i]; string T = ""; T += S[0][0]; vector> can = {{0, 0}}; while(int(T.size()) < H + W - 1) { char mi = 'z'; vector> nt; for(auto [x, y] : can) { if(x + 1 < H) { if(S[x + 1][y] < mi) { mi = S[x + 1][y]; nt = {{x + 1, y}}; } else if(S[x + 1][y] == mi) { nt.push_back({x, y}); } } if(y + 1 < W) { if(S[x][y + 1] < mi) { mi = S[x][y + 1]; nt = {{x, y + 1}}; } else if(S[x][y + 1] == mi) { nt.push_back({x, y}); } } } sort(nt.begin(), nt.end()); nt.erase(unique(nt.begin(), nt.end()), nt.end()); swap(can, nt); T += mi; } cout << T << endl; }