#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");
}