from dataclasses import dataclass, field from typing import Optional @dataclass class MinimumManager: value: Optional[str] = None idxes: set[int] = field(default_factory=set) def main(): H, W = map(int, input().split()) letters = [list(input()) for _ in range(H)] step_letters = [] for idx_sum in range(H+W-1): step_letters.append([]) for idx_height in range(idx_sum+1): try: step_letters[-1].append(letters[idx_height] [idx_sum-idx_height]) except IndexError: pass strings = "" current_idx = set((0,)) for step_idx, step_letter in enumerate(step_letters): minimum = MinimumManager() for idx in current_idx: if minimum.value is None: minimum.value = step_letter[idx] minimum.idxes = set((idx, )) continue if minimum.value == step_letter[idx]: minimum.idxes.add(idx) elif minimum.value > step_letter[idx]: minimum.value = step_letter[idx] minimum.idxes = set((idx,)) strings += minimum.value current_idx = set() for idx in minimum.idxes: if step_idx < max(W, H) - 1: current_idx.add(idx) current_idx.add(min(idx+1, min(H, W)-1)) else: current_idx.add(min(idx, len(step_letter)-2)) current_idx.add(max(idx-1, 0)) print(strings) if __name__ == "__main__": main()