#include<stdio.h>
void process(int a[],int k)
{
int i;
for(i = 1;i <= k;i++)
printf("%d ",a[i]);
puts("");
}
int construct(int a[],int k,int n,int c[])
{
int i;
int pre[100];
for(i = 1;i < 100;i++)
pre[i] = 0;
for(i = 1;i < k;i++)
pre[a[i]] = 1;
int n2 = 0;
for(i = 1;i <= n;i++)
if(!pre[i])
c[n2++] = i;
return n2;
}
void backtrack(int a[],int k,int n)
{
int c[100],n2,i;
if(k == n)
process(a,k);
else
{
k = k+1;
n2 = construct(a,k,n,c);
for(i = 0;i < n2;i++)
{
a[k] = c[i];
backtrack(a,k,n);
//return ;
}
}
}
int main()
{
int a[100],n,i;
while(scanf("%d",&n)&&n)
{
backtrack(a,0,n);
}
return 0;
}