#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int N=1000005;
int n,m;
int p[N],phi[N],u[N],f[N];//f£ºÔ¼Êý¸öÊý
bool b[N];
void clear()
{
m=0;
memset(b,false,sizeof(b));
}
void get_p()
{
clear();
for (int i=2;i<=n;i++)
{
if (!b[i]) p[++m]=i;
for (int j=1;j<=m&&p[j]*i<=n;j++)
{
b[i*p[j]]=true;
if (i%p[j]==0) break;
}
}
}
void get_phi()
{
clear();
phi[1]=1;
for (int i=2;i<=n;i++)
{
if (!b[i])
{
p[++m]=i;
phi[i]=i-1;
}
for (int j=1;j<=m&&p[j]*i<=n;j++)
{
b[i*p[j]]=true;
if (i%p[j]) phi[i*p[j]]=phi[i]*phi[p[j]];
else
{
phi[i*p[j]]=phi[i]*p[j];
break;
}
}
}
}
void get_u()
{
clear();
u[1]=1;
for (int i=2;i<=n;i++)
{
if (!b[i])
{
p[++m]=i;
u[i]=-1;
}
for (int j=1;j<=m&&p[j]*i<=n;j++)
{
b[i*p[j]]=true;
if (i%p[j]) u[i*p[j]]=-u[i];
else
{
u[i*p[j]]=0;
break;
}
}
}
}
void get_f()
{
clear();
f[1]=1;
for (int i=2;i<=n;i++)
{
if (!b[i])
{
f[i]=2;
p[++m]=i;
}
for (int j=1;j<=m&&p[j]*i<=n;j++)
{
b[i*p[j]]=true;
if (i%p[j]) f[i*p[j]]=f[i]*f[p[j]];
else
{
int tmp=i,cnt=2;
while (tmp%p[j]==0) tmp=tmp/p[j],cnt++;
f[i*p[j]]=f[tmp]*cnt;
}
}
}
}
int main()
{
scanf("%d",&n);
get_p();
for (int i=1;i<=m;i++) printf("%d ",p[i]);printf("\n");
get_phi();
for (int i=1;i<=n;i++) printf("%d ",phi[i]);printf("\n");
get_u();
for (int i=1;i<=n;i++) printf("%d ",u[i]);printf("\n");
get_f();
for (int i=1;i<=n;i++) printf("%d ",f[i]);printf("\n");
return 0;
}