#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<set>
#include<algorithm>
#include<map>
#include<vector>
#include<queue>
#include<iostream>
#include<string>
#include<cmath>
#define N 100010
#define FOR(i,a,b) for(i=(a);i<=(b);i++)
#define ROF(i,a,b) for(i=(a);i>=(b);i--)
#define mmt(a,b) memset(a,b,sizeof(a))
typedef long long LL;
using namespace std;
int ans[N],vis[N],m,start,g[N][2],Max;
bool f;
void DFS(int x,int p)
{
if (f) return;
if (p>Max) return;
ans[p]=x;
int i;
FOR(i,0,1)
{
if (g[x][i]==start&&p==Max) {f=1;return;}
if (!vis[g[x][i]])
{
vis[g[x][i]]=1;
DFS(g[x][i],p+1);
vis[g[x][i]]=0;
}
}
}
int main()
{
scanf("%d",&m);
Max=1<<m;int i;
printf("%d ",Max);
FOR(i,0,Max-1)
{
int tt=1<<(m-1);
int ti=i%tt;
g[i][0]=ti<<1;
g[i][1]=(ti<<1)+1;
}
FOR(start,0,Max-1)
{
f=0;mmt(ans,0);mmt(vis,0);vis[start]=1;
DFS(start,1);
if (f) break;
}
FOR(i,1,Max) printf("%d",ans[i]>>(m-1)&1);
printf("\n");
}