#include <bits/stdc++.h>
#define fi first
#define se second
#define ll long long
#define N int(1e6)
using namespace std;
ll r, c;
ll dx[4]= {1, -1, 0, 0};
ll dy[4]= {0, 0, 1, -1};
char a[55][55];
ll tg[55][55],kc[55][55];
bool vis[55][55];
bool bien(ll x,ll y)
{
return (x<=r && y<=c && x>=1 && y>=1);
}
bool ok;
void bfs(ll x, ll y)
{
memset(vis,0,sizeof vis);
queue<pair<ll, ll>>q;
q.push({x, y});
vis[x][y]=1;
tg[x][y]=0;
//cout<<x<<" "<<y<<'\n';
while(!q.empty())
{
auto top=q.front();
q.pop();
for(int i=0; i<=3; i++)
{
ll nx=top.fi+dx[i];
ll ny=top.se+dy[i];
if(!vis[nx][ny] && a[nx][ny]=='.' && bien(nx,ny))
{
//cout<<nx<<" "<<ny<<'\n';
tg[nx][ny]=min(tg[nx][ny],tg[top.fi][top.se]+1);
vis[nx][ny]=1;
q.push({nx,ny});
}
}
}
}
void bfs1(ll x,ll y)
{
memset(vis,0,sizeof vis);
queue<pair<ll, ll>>q;
q.push({x, y});
vis[x][y]=1;
kc[x][y]=0;
//cout<<x<<" "<<y<<'\n';
while(!q.empty())
{
auto top=q.front();
q.pop();
for(int i=0; i<=3; i++)
{
ll nx=top.fi+dx[i];
ll ny=top.se+dy[i];
if(a[nx][ny]=='D' && (kc[top.fi][top.se]+1)<tg[nx][ny])
{
ok=1;
//cout<<" "<<nx<< " "<<ny<<'\n';
kc[nx][ny]=kc[top.fi][top.se]+1;
cout<<kc[nx][ny];
return ;
}
if(!vis[nx][ny] && a[nx][ny]=='.' && bien(nx,ny) && (kc[top.fi][top.se]+1)<tg[nx][ny])
{
kc[nx][ny]=min(kc[nx][ny],kc[top.fi][top.se]+1);
//cout<<nx<<" "<<ny<<" "<<kc[nx][ny]<<'\n';
vis[nx][ny]=1;
q.push({nx,ny});
}
}
}
}
pair<ll,ll>bd;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>r>>c;
for(int i=1; i<=r; i++)
for(int j=1; j<=c; j++)
{
tg[i][j]=LLONG_MAX;
kc[i][j]=LLONG_MAX;
cin>>a[i][j];
if(a[i][j]=='S') bd={i,j};
}
//cout<<bd.fi<<" "<<bd.se<<'\n'<<kt.fi<<" "<<kt.se;
for(int i=1; i<=r; i++)
for(int j=1; j<=c; j++)
if(a[i][j]=='*') bfs(i, j);
// for(int i=1; i<=r; i++)
// {
// for(int j=1; j<=c; j++)
// {
// //cout<<a[i][j]<<" ";
// if(a[i][j]=='*') cout<<0<<" ";
// else if(a[i][j]=='.') cout<<tg[i][j]<<" ";
// else cout<<a[i][j]<<" ";
// }
// cout<<'\n';
// }
bfs1(bd.fi,bd.se);
if(ok==0) cout<<"KAKTUS";
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSBOIGludCgxZTYpCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmxsIHIsIGM7CmxsIGR4WzRdPSB7MSwgLTEsIDAsIDB9OwpsbCBkeVs0XT0gezAsIDAsIDEsIC0xfTsKY2hhciBhWzU1XVs1NV07CmxsIHRnWzU1XVs1NV0sa2NbNTVdWzU1XTsKYm9vbCB2aXNbNTVdWzU1XTsKYm9vbCBiaWVuKGxsIHgsbGwgeSkKewogICAgcmV0dXJuICh4PD1yICYmIHk8PWMgJiYgeD49MSAmJiB5Pj0xKTsKfQpib29sIG9rOwp2b2lkIGJmcyhsbCB4LCBsbCB5KQp7CiAgICBtZW1zZXQodmlzLDAsc2l6ZW9mIHZpcyk7CiAgICBxdWV1ZTxwYWlyPGxsLCBsbD4+cTsKICAgIHEucHVzaCh7eCwgeX0pOwogICAgdmlzW3hdW3ldPTE7CiAgICB0Z1t4XVt5XT0wOwogICAgLy9jb3V0PDx4PDwiICI8PHk8PCdcbic7CiAgICB3aGlsZSghcS5lbXB0eSgpKQogICAgewogICAgICAgIGF1dG8gdG9wPXEuZnJvbnQoKTsKICAgICAgICBxLnBvcCgpOwogICAgICAgIGZvcihpbnQgaT0wOyBpPD0zOyBpKyspCiAgICAgICAgewogICAgICAgICAgICBsbCBueD10b3AuZmkrZHhbaV07CiAgICAgICAgICAgIGxsIG55PXRvcC5zZStkeVtpXTsKICAgICAgICAgICAgaWYoIXZpc1tueF1bbnldICYmIGFbbnhdW255XT09Jy4nICYmIGJpZW4obngsbnkpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAvL2NvdXQ8PG54PDwiICI8PG55PDwnXG4nOwogICAgICAgICAgICAgICAgdGdbbnhdW255XT1taW4odGdbbnhdW255XSx0Z1t0b3AuZmldW3RvcC5zZV0rMSk7CiAgICAgICAgICAgICAgICB2aXNbbnhdW255XT0xOwogICAgICAgICAgICAgICAgcS5wdXNoKHtueCxueX0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9CnZvaWQgYmZzMShsbCB4LGxsIHkpCnsKICAgIG1lbXNldCh2aXMsMCxzaXplb2YgdmlzKTsKICAgIHF1ZXVlPHBhaXI8bGwsIGxsPj5xOwogICAgcS5wdXNoKHt4LCB5fSk7CiAgICB2aXNbeF1beV09MTsKICAgIGtjW3hdW3ldPTA7CiAgICAvL2NvdXQ8PHg8PCIgIjw8eTw8J1xuJzsKICAgIHdoaWxlKCFxLmVtcHR5KCkpCiAgICB7CiAgICAgICAgYXV0byB0b3A9cS5mcm9udCgpOwogICAgICAgIHEucG9wKCk7CiAgICAgICAgZm9yKGludCBpPTA7IGk8PTM7IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIGxsIG54PXRvcC5maStkeFtpXTsKICAgICAgICAgICAgbGwgbnk9dG9wLnNlK2R5W2ldOwogICAgICAgICAgICBpZihhW254XVtueV09PSdEJyAmJiAoa2NbdG9wLmZpXVt0b3Auc2VdKzEpPHRnW254XVtueV0pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG9rPTE7CiAgICAgICAgICAgICAgICAvL2NvdXQ8PCIgICI8PG54PDwgIiAiPDxueTw8J1xuJzsKICAgICAgICAgICAgICAgIGtjW254XVtueV09a2NbdG9wLmZpXVt0b3Auc2VdKzE7CiAgICAgICAgICAgICAgICBjb3V0PDxrY1tueF1bbnldOwogICAgICAgICAgICAgICAgcmV0dXJuIDsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZighdmlzW254XVtueV0gJiYgYVtueF1bbnldPT0nLicgJiYgYmllbihueCxueSkgJiYgKGtjW3RvcC5maV1bdG9wLnNlXSsxKTx0Z1tueF1bbnldKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBrY1tueF1bbnldPW1pbihrY1tueF1bbnldLGtjW3RvcC5maV1bdG9wLnNlXSsxKTsKICAgICAgICAgICAgICAgIC8vY291dDw8bng8PCIgIjw8bnk8PCIgIjw8a2NbbnhdW255XTw8J1xuJzsKICAgICAgICAgICAgICAgIHZpc1tueF1bbnldPTE7CiAgICAgICAgICAgICAgICBxLnB1c2goe254LG55fSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KcGFpcjxsbCxsbD5iZDsKaW50IG1haW4oKQp7CiAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbygwKTsKICAgIGNpbi50aWUoMCk7CiAgICBjb3V0LnRpZSgwKTsKCiAgICBjaW4+PnI+PmM7CiAgICBmb3IoaW50IGk9MTsgaTw9cjsgaSsrKQogICAgICAgIGZvcihpbnQgaj0xOyBqPD1jOyBqKyspCiAgICAgICAgewogICAgICAgICAgICB0Z1tpXVtqXT1MTE9OR19NQVg7CiAgICAgICAgICAgIGtjW2ldW2pdPUxMT05HX01BWDsKICAgICAgICAgICAgY2luPj5hW2ldW2pdOwogICAgICAgICAgICBpZihhW2ldW2pdPT0nUycpIGJkPXtpLGp9OwogICAgICAgIH0KICAgIC8vY291dDw8YmQuZmk8PCIgIjw8YmQuc2U8PCdcbic8PGt0LmZpPDwiICI8PGt0LnNlOwogICAgZm9yKGludCBpPTE7IGk8PXI7IGkrKykKICAgICAgICBmb3IoaW50IGo9MTsgajw9YzsgaisrKQogICAgICAgICAgICBpZihhW2ldW2pdPT0nKicpIGJmcyhpLCBqKTsKCi8vICAgIGZvcihpbnQgaT0xOyBpPD1yOyBpKyspCi8vICAgIHsKLy8gICAgICAgIGZvcihpbnQgaj0xOyBqPD1jOyBqKyspCi8vICAgICAgICB7Ci8vICAgICAgICAgICAgLy9jb3V0PDxhW2ldW2pdPDwiICI7Ci8vICAgICAgICAgICAgaWYoYVtpXVtqXT09JyonKSBjb3V0PDwwPDwiICI7Ci8vICAgICAgICAgICAgZWxzZSBpZihhW2ldW2pdPT0nLicpIGNvdXQ8PHRnW2ldW2pdPDwiICI7Ci8vICAgICAgICAgICAgZWxzZSBjb3V0PDxhW2ldW2pdPDwiICI7Ci8vICAgICAgICB9Ci8vICAgICAgICBjb3V0PDwnXG4nOwovLyAgICB9CiAgICBiZnMxKGJkLmZpLGJkLnNlKTsKICAgIGlmKG9rPT0wKSBjb3V0PDwiS0FLVFVTIjsKCiAgICByZXR1cm4gMDsKfQo=