#include<cstdio>
#include<cstring>
#include<cmath>
#include<string>
#include<vector>
#include<iostream>
using namespace std;
 
int team[70][70];	//表示与队伍i已经对战过的队伍 
int cur[70];		//表示当前已经对战过的队伍
int op[35][2];
int n; 
 
int main()
{
	cin >> n;
	
	int num = pow(2,n);
	memset(team,0,sizeof(team));
	for(int i=1; i<=num-1; i++)	//表示第i场比赛 
	{
		memset(cur,0,sizeof(cur));
		memset(op,0,sizeof(op));
		
		int t = 0;
		 
		for(int j=1; j<=num; j++)	//表示第j支队伍 
		{
			if (cur[j] == 0)	//如果这支队伍没有对手,配对 
			{
				cur[j] = 1;
				for(int k=1; k<=num; k++)	//k表示配对的对手 
				{
					if (j == k || cur[k] == 1)	//如果队伍k已经参与其他比赛,跳过 
						continue;
					if (team[j][k] == 0 && cur[k] == 0)	//如果队伍j与k没有对战过,配对 
					{
						team[j][k] = 1;
						cur[k] = 1;
						op[t][0] = j;
						op[t++][1] = k;
						break;
					}
				}
			}
		}
		printf("<%d>",i);
		for(int i=0; i<t; i++)
			printf("%d-%d%c",op[i][0],op[i][1],i==t-1?10:32);
	}
	return 0;
}
/**************************************************************
	Problem: 1849
	User: admin
	Language: C++
	Result: Accepted
	Time:27 ms
	Memory:2344 kb
****************************************************************/