/*问题描述
  设有有2 n(n<=6)个球队进行单循环比赛,计划在2 n – 1天内完成,
每个队每天进行一场比赛。设计一个比赛的安排,使在2 n – 1天内每个队都与不同的对手比赛。
输入格式
  输入文件matchplan.in共一行,输入n的数值。
输出格式
  输出文件matchplan.out共(2 n – 1)行,第i行输出第i天的比赛安排。
  格式为: A-B,C-D,……。其中i是天数,A,B分别为比赛双方的编号,每行共2 n-1个比赛场次。
样例输入
2
样例输出
<1>1-2,3-4
<2>1-3,2-4
<3>1-4,2-3
*/

#include<stdio.h>
int b[30][30]={0};//标记曾经匹配过 
int dq[30]={0};//当天匹配标记 
int a[30];//被匹配者  (小组队伍红方) 
int a1[30];//匹配者 (小组队伍蓝方) 
int tw; //比赛小组队伍 (10支队伍 5队小组队伍) 
int T=0;//判断当前天数比赛 第一顺序方案是否已制定 
void f(int pos )
{int i,j,bt;//当前被匹配者 用于清除标记 

if(tw<pos)//pos 代表当前选第几组的比赛 
    {

        printf("<%d>",a1[1]-1);T=a1[1];//当前天数第一顺序计划已定 
       for(i=1;i<=tw;i++)
        {printf("%d-%d ",a[i],a1[i]);//输出匹配小组队伍 

         b[a[i]][a1[i]]=1; b[a1[i]][a[i]]=1;//相互标记为曾经匹配 
        }
          printf("\n");

    }
    else
    { for(i=1;i<=2*tw;i++)
        if(dq[i]==0){a[pos]=i;dq[i]=1;bt=i;break;} //按顺序拿出被匹配着; 
        for(i=1;i<=2*tw;i++)//匹配者循环 
         if( b[a[pos]][i]==0&&dq[i]==0)//判断曾经是否匹配过并且当前是否被匹配 
         {a1[pos]=i;dq[i]=1;
         f(pos+1);//试执行下一组比赛; 
           dq[i]=0;//清除当前匹配者
         if(T==a1[1]){i=2*tw;} //若当天第一顺序方案已确定则无需重复设计方案 
         }

         dq[bt]=0;//清除当前被匹配者 
    }


}

int main()
{
int n,i,j;
scanf("%d",&n);
tw=n;//小组队伍组数 
n=n*2-1;
for(i=1;i<=n;i++)//循环天数; 
     f(1);//从第一组队伍开始 

return 0;
}