Link to this code: https://cses.fi/paste/59d7d19510bd28b06959cb/
#include<iostream>
#include<algorithm>
#include<vector>
#include<set>
using namespace std;
vector<int>solution;
int node;
void dfs(set<int>*graph,int u){
  while(!graph[u].empty()){
    node=*graph[u].begin();
    graph[u].erase(node);
    dfs(graph,node);
  }
  solution.emplace_back(u&1);  
}

int main(){
  int n,len;
  cin>>n;
  if(n==1){
    puts("01");
    return 0;
  }
  len=1<<(n-1);
  set<int>graph[len];
  for(int i=0;i<len;i++){
    graph[i].insert((len-1)&((i<<1) | 1));
    graph[i].insert((len-1)&(i<<1));
  }
  dfs(graph,0);
  reverse(solution.begin(),solution.end());
  for(int i=1;i<n-1;i++)cout<<0;
  for(int i:solution)cout<<i;
  return 0;
}
// #include<iostream>
// using namespace std;
// inline int v(char c){
//   return c-'0';
// } 
// int main(){
//   string s;
//   cin>>s;
//   for(int i=0;i<s.size()-2;i++){
//     cout<<v(s[i])*4+v(s[i+1])*2+v(s[i+2])<<endl;
//   }
// }