#include<bits/stdc++.h>
using namespace std;
int vis[51][51],v[51][51],ex,ey,fx,fy,n,m;
int dx[4]={1,0,-1,0};
int dy[4]={0,1,0,-1};
char a[51][51];
struct node
{
int x,y,ans;
};
queue<node>q;
void bfs1()
{
while(!q.empty())
{
node now=q.front();
q.pop();
for(int i=0;i<4;++i)
{
int nx=now.x+dx[i];
int ny=now.y+dy[i];
if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&v[nx][ny]==99999&&a[nx][ny]!='X'&&a[nx][ny]!='D')
{
v[nx][ny]=now.ans+1;
q.push({nx,ny,now.ans+1});
}
}
}
}
void bfs2(int x,int y)
{
q.push({x,y,0});
while(!q.empty())
{
node now=q.front();
q.pop();
if(now.x==fx&&now.y==fy)
{
cout<<now.ans;
return;
}
for(int i=0;i<4;++i)
{
int nx=now.x+dx[i];
int ny=now.y+dy[i];
if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&!vis[nx][ny]&&a[nx][ny]!='X'&&v[nx][ny]>now.ans)
{
vis[nx][ny]=1;
q.push({nx,ny,now.ans+1});
}
}
}
cout<<"KAKTUS";
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
{
v[i][j]=99999;
cin>>a[i][j];
if(a[i][j]=='*')
{
v[i][j]=0;
q.push({i,j,0});
}
if(a[i][j]=='S')
{
ex=i;
ey=j;
}
if(a[i][j]=='D')
{
fx=i;
fy=j;
}
}
bfs1();
vis[ex][ey]=1;
bfs2(ex,ey);
return 0;
}