#include <bits/stdc++.h>
using namespace std;
//路径总数和路径
int a[100][100],t=0;                 
 //两种移动规则 
int x[2]={1,0},y[2]={0,1};
int n,m;

//输出结果 
void print(int s)
{
    t++;
    cout<<t<<":";
	for(int i=1;i<s;i++){
		cout<<a[i][1]<<","<<a[i][2]<<"->";	
	}
	
	cout<<n<<","<<m<<endl;
}

//递归回溯 
void search(int k)
{
	//往2个方向走
	for (int i=0;i<2;i++){ 
		//判断马不越界
		if (a[k-1][1]+x[i]>=0&&a[k-1][1]+x[i]<=n 
		     &&a[k-1][2]+y[i]>=0&&a[k-1][2]+y[i]<=m){
		     	//保存当前卒的位置
				a[k][1]=a[k-1][1]+x[i];                              
				a[k][2]=a[k-1][2]+y[i];
				if (a[k][1]==n&&a[k][2]==m){
					print(k);
				}else{
					//搜索下一步	
					search(k+1);
				} 
			 
		}
	} 
}

int main(){
	cin>>n>>m;
	a[1][1]=1;
	a[1][2]=1;
	//从坐标(0,0)开始往右跳第二步
	search(2); 
}

/**************************************************************
	Problem: 1360
	User: admin
	Language: C++
	Result: Accepted
	Time:9 ms
	Memory:2112 kb
****************************************************************/