#include <bits/stdc++.h>
using namespace std;
char s[20][20];//存放迷宫
bool f[20][20];//标记是否走过
int r[10000][2];//存放Mitch走过的路径
//右,下,左,上
int fx[] = {0,1,0,-1};
int fy[] = {1,0,-1,0};
int n,m,total;
bool flag;//标记是否存在走出迷宫的路径
//输出路径
void print(int x){
int i;
total++;
cout<<total<<":";
flag = true;//有走出迷宫的路径
for(i = 1;i <= x;i++){
if(i != x){
cout<<r[i][1]<<","<<r[i][2]<<"->";
}else{
cout<<r[i][1]<<","<<r[i][2]<<endl;
}
}
}
//k表示数组填到的下标
void fun(int k){
int i,j,dx,dy;
//遍历所有方向
for(i = 0;i < 4;i++){
dx = r[k-1][1] + fx[i];
dy = r[k-1][2] + fy[i];
//判断新点是否可达
if(dx >= 1 && dx <= n && dy >= 1 && dy <= m && s[dx][dy] == 'o' && f[dx][dy] == false){
r[k][1] = dx;
r[k][2] = dy;
f[dx][dy] = true;//标记该点走过
//到目的地,输出
if(dx == n && dy == m){
print(k);
}else{
fun(k+1);
}
f[dx][dy] = false;//回溯
}
}
}
int main(){
cin>>n>>m;
int i,j;
for(i = 1;i <= n;i++){
for(j = 1;j <= m;j++){
cin>>s[i][j];
}
}
//起始点
r[1][1] = 1;
r[1][2] = 1;
f[1][1] = true;//标记起始点走过了
fun(2);
if(flag == false){
cout<<"no"<<endl;
}
}
/**************************************************************
Problem: 1411
User: admin
Language: C++
Result: Accepted
Time:20 ms
Memory:2156 kb
****************************************************************/