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