# your code goes hereimport math
from collections import deque
from heapq import heapify,heappop,heappush
def find(u, par):
if par[u] != u:
par[u] = find(par[u], par)
return par[u]
def union(u, v, par, size):
u_root = find(u, par)
v_root = find(v, par)
if u_root == v_root:
return
if size[u_root] < size[v_root]:
par[u_root] = v_root
size[v_root] += size[u_root]
else:
par[v_root] = u_root
size[u_root] += size[v_root]
def ip():
return map(int,input().split())
T=1
# T=int(input())
for __ in range(T):
n=int(input())
g=[]
for _ in range(n):
s=str(input())
g.append(s)
dist=[[float('inf') for _ in range(n)] for _ in range(n)]
par=[[(-1,-1) for _ in range(n)] for _ in range(n)]
dist[0][0]=0
direc=[(1,0),(0,1)]
q=deque()
q.append((0,0,0))
while q:
ln=len(q)
mn=26
lst=[]
for _ in range(ln):
d,u,v=q.popleft()
if u==n-1 and v==n-1:
break
for t1,t2 in direc:
x,y=u+t1,v+t2
if 0<=x<n and 0<=y<n:
m=ord(g[x][y])-ord('a')
if m<mn:
mn=m
lst=[(x,y,u,v)]
elif m==mn:
lst.append((x,y,u,v))
for i in lst:
u,v,x,y=i
if d+1<dist[u][v]:
dist[u][v]=d+1
par[u][v]=(x,y)
q.append((d+1,u,v))
path=[]
x=n-1
y=n-1
while par[x][y]!=(-1,-1):
path.append(g[x][y])
px,py=par[x][y]
x,y=px,py
path.append(g[0][0])
print("".join(path[::-1]))
IyB5b3VyIGNvZGUgZ29lcyBoZXJlaW1wb3J0IG1hdGgKZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVxdWUKZnJvbSBoZWFwcSBpbXBvcnQgaGVhcGlmeSxoZWFwcG9wLGhlYXBwdXNoCmRlZiBmaW5kKHUsIHBhcik6CgogICAgaWYgcGFyW3VdICE9IHU6CiAgICAgICAgcGFyW3VdID0gZmluZChwYXJbdV0sIHBhcikKICAgIHJldHVybiBwYXJbdV0KCmRlZiB1bmlvbih1LCB2LCBwYXIsIHNpemUpOgogICAgdV9yb290ID0gZmluZCh1LCBwYXIpCiAgICB2X3Jvb3QgPSBmaW5kKHYsIHBhcikKCiAgICBpZiB1X3Jvb3QgPT0gdl9yb290OgogICAgICAgIHJldHVybiAKCgogICAgaWYgc2l6ZVt1X3Jvb3RdIDwgc2l6ZVt2X3Jvb3RdOgogICAgICAgIHBhclt1X3Jvb3RdID0gdl9yb290CiAgICAgICAgc2l6ZVt2X3Jvb3RdICs9IHNpemVbdV9yb290XQogICAgZWxzZToKICAgICAgICBwYXJbdl9yb290XSA9IHVfcm9vdAogICAgICAgIHNpemVbdV9yb290XSArPSBzaXplW3Zfcm9vdF0KCmRlZiBpcCgpOgogICAgcmV0dXJuIG1hcChpbnQsaW5wdXQoKS5zcGxpdCgpKQoKCgoKVD0xCiMgVD1pbnQoaW5wdXQoKSkKZm9yIF9fIGluIHJhbmdlKFQpOgogICAgbj1pbnQoaW5wdXQoKSkKICAgIGc9W10KICAgIGZvciBfIGluIHJhbmdlKG4pOgogICAgICAgIHM9c3RyKGlucHV0KCkpCiAgICAgICAgZy5hcHBlbmQocykKICAgIAogICAgZGlzdD1bW2Zsb2F0KCdpbmYnKSBmb3IgXyBpbiByYW5nZShuKV0gZm9yIF8gaW4gcmFuZ2UobildCiAgICBwYXI9W1soLTEsLTEpIGZvciBfIGluIHJhbmdlKG4pXSBmb3IgXyBpbiByYW5nZShuKV0KCiAgICBkaXN0WzBdWzBdPTAKICAgIGRpcmVjPVsoMSwwKSwoMCwxKV0KICAgIHE9ZGVxdWUoKQogICAgcS5hcHBlbmQoKDAsMCwwKSkKICAgIHdoaWxlIHE6CiAgICAgICAgbG49bGVuKHEpCiAgICAgICAgbW49MjYKICAgICAgICBsc3Q9W10KICAgICAgICBmb3IgXyBpbiByYW5nZShsbik6CiAgICAgICAgICAgIGQsdSx2PXEucG9wbGVmdCgpCiAgICAgICAgICAgIGlmIHU9PW4tMSBhbmQgdj09bi0xOgogICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgZm9yIHQxLHQyIGluIGRpcmVjOgogICAgICAgICAgICAgICAgeCx5PXUrdDEsdit0MgogICAgICAgICAgICAgICAgaWYgMDw9eDxuIGFuZCAwPD15PG46CiAgICAgICAgICAgICAgICAgICAgbT1vcmQoZ1t4XVt5XSktb3JkKCdhJykKICAgICAgICAgICAgICAgICAgICBpZiBtPG1uOgogICAgICAgICAgICAgICAgICAgICAgICBtbj1tCiAgICAgICAgICAgICAgICAgICAgICAgIGxzdD1bKHgseSx1LHYpXQogICAgICAgICAgICAgICAgICAgIGVsaWYgbT09bW46CiAgICAgICAgICAgICAgICAgICAgICAgIGxzdC5hcHBlbmQoKHgseSx1LHYpKQogICAgICAgIGZvciBpIGluIGxzdDoKICAgICAgICAgICAgdSx2LHgseT1pCiAgICAgICAgICAgIGlmIGQrMTxkaXN0W3VdW3ZdOgogICAgICAgICAgICAgICAgZGlzdFt1XVt2XT1kKzEKICAgICAgICAgICAgICAgIHBhclt1XVt2XT0oeCx5KQogICAgICAgICAgICAgICAgcS5hcHBlbmQoKGQrMSx1LHYpKQogICAgCiAgICBwYXRoPVtdCiAgICB4PW4tMQogICAgeT1uLTEKCiAgICB3aGlsZSBwYXJbeF1beV0hPSgtMSwtMSk6CiAgICAgICAgcGF0aC5hcHBlbmQoZ1t4XVt5XSkKICAgICAgICBweCxweT1wYXJbeF1beV0KICAgICAgICB4LHk9cHgscHkKICAgIHBhdGguYXBwZW5kKGdbMF1bMF0pCiAgICBwcmludCgiIi5qb2luKHBhdGhbOjotMV0pKQogICAgICAgICAgICAgICAgCgoK