#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
****************************************************************/