#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void leage(int n){
	int i,j,k;
	int mapsize;
	int *map;
	mapsize=(n-1)*(n-1)*sizeof(int);
	map=(int*)malloc(mapsize);
	memset(map,0,mapsize);
/*
表の割り当て
実際は半分の容量でよい
      j=   0 1 2 ..n-2
         1 2 3 4 ..n
 i=0  1 XX
   1  2 XXXX
   2  3 XXXXXX
   3  4 XXXXXXXX
   :  :
  n-1 n
*/
	for(i=0;i<n-1;i++){	//行方向のループ
		for(j=i;j<n-1;j++){//列方向のループ
			if(i==0){
			//1のチームはシンプルな組み合わせとし、
			//この部分はチームスケジュールフラグとする
				map[j]=1<<j;
			}else{
				//あいている日程の検索
				//とりあえず、上の欄の次にしてみる
				k=map[(i-1)*(n-1)+j];

				if((k*=2)&((1<<(n-1))-1)==0) k=1;	//左にビットローテーション

				
				while((map[j]|map[i-1])&k){	//両チームの予定が埋まってたら次の日程で
					if((k*=2)&((1<<(n-1))-1)==0) k=1;	//左にビットローテーション
				}
				//日程の決定
				map[i*(n-1)+j]=k;
				//チームスケジュールの登録
				map[j]|=k;
			}
		}
	}
	//スケジュールの表示
	for(k=0;k<n-1;k++){	//日程のループ
		//1のチームはシンプルな組み合わせにする。
		printf("%d:1-%d ",k+1,k+2);
		//それ以外のチームの検索
		for(i=1;i<n-1;i++){	//行方向のループ
			for(j=i;j<n-1;j++){//列方向のループ
				if(map[i*(n-1)+j]==(1<<k))	//予定日だったら表示
					printf("%d-%d ",i+1,j+2);
			}
		}
		printf("\n");
	}
	printf("\n");
	free(map);
}

int main(){
	
	leage(2);
	leage(4);
	leage(6);
	return 0;
}
