#include <bits/stdc++.h>
using namespace std;
#define all(v) v.begin(), v.end()
#define endl '\n'
const int M = 1001;
int val[M][M], x, n, m;
vector<int> nei[M*M], ans;
bool vis[M*M], vis1[M][M];
int dfs(int x,int y)
{
vis1[x][y]=1;
for (int i=max(0,x-1);i<=min(x+1,n-1);i++)
for (int j=max(0,y-1);j<=min(y+1,m-1);j++)
{
if (i==x or j==y)
{
if (vis1[i][j]) continue;
if (!val[i][j])
return dfs(i,j);
return val[i][j];
}
}
}
void fin(int u)
{
vis[u]=1;
for (int i:nei[u])
if (!vis[i])
fin(i);
cout<<u<<endl;
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(NULL), cout.tie(NULL);
cin>>n>>m;
string a[n];
for (int i=0;i<n;i++)
cin>>a[i];
vector<array<int,5>> v;
for (int i=0;i<n;i++)
{
for (int j=0;j<m;j++)
if ('1'<=a[i][j] && a[i][j]<='9')
{
int x,x1,y,y1, val=0;
for (int k=i-1;k>=0;k--)
if (a[k][j]=='-' or a[k][j]=='+' or a[k][j]=='|')
{
x=k;break;
}
for (int k=i+1;k<n;k++)
if (a[k][j]=='-' or a[k][j]=='+' or a[k][j]=='|')
{
x1=k;break;
}
for (int k=j+1;k<m;k++)
if (a[i][k]=='-' or a[i][k]=='+' or a[i][k]=='|')
{
y1=k;break;
}
for (int k=j-1;k>=0;k--)
if (a[i][k]=='-' or a[i][k]=='+' or a[i][k]=='|')
{
y=k;break;
}
for (int k=j;k<m;k++)
{
if (a[i][k]<'0' or a[i][k]>'9') break;
val=val*10+a[i][k]-'0';
}
v.push_back({x,x1,y,y1,val});
j=y1;
}
}
for (auto e:v)
{
for (int i=e[0];i<=e[1];i++)
for (int j=e[2];j<=e[3];j++)
val[i][j]=e[4];
}
for (int i=0;i<n;i++)
for (int j=0;j<m;j++)
{
if (a[i][j]=='.') val[i][j]=-1, vis1[i][j]=1;
else if(!val[i][j]) val[i][j]=0;
}
for (auto e:v)
{
for (int i=e[0];i<=e[1];i++)
for (int j=e[2];j<=e[3];j++)
vis1[i][j]=1;
x=e[4];
for (int i=e[1];i>=e[0];i--)
{
if (e[2] && !val[i][e[2]-1])
nei[x].push_back(dfs(i,e[2]-1));
if (e[3]+1<m && !val[i][e[3]+1])
nei[x].push_back(dfs(i,e[3]+1));
}
for (int i=e[0];i<=e[1];i++)
for (int j=e[2];j<=e[3];j++)
vis1[i][j]=0;
}
fin(1);
return 0;
}