public class gray {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int num = (int)Math.pow(2, n);//根据输入的整数,计算出此Gray序列大小
String[] s1 = {"0","1"};//第一个Gray序列
for(int i=2;i<=n;i++){//循环根据第一个Gray序列,来一个一个的求
int p = (int)Math.pow(2, i);//到了第几个的时候,来计算出此Gray序列大小
String[] si = new String[p];
for(int j=0;j<p;j++){//循环根据某个Gray序列,来一个一个的求此序列
if(j<(p/2)){
si[j] = "0" + s1[j];//原始序列前面加上"0"
}else{
si[j] = "1" + s1[p-j-1];//原始序列反序,前面加上"1"
}
}
s1 = si;//把求得的si,附给s1,以便求下一个Gray序列
}
for(int i=0;i<num;i++){
System.out.println(s1[i]);
}
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int num = (int)Math.pow(2, n);//根据输入的整数,计算出此Gray序列大小
String[] s1 = {"0","1"};//第一个Gray序列
for(int i=2;i<=n;i++){//循环根据第一个Gray序列,来一个一个的求
int p = (int)Math.pow(2, i);//到了第几个的时候,来计算出此Gray序列大小
String[] si = new String[p];
for(int j=0;j<p;j++){//循环根据某个Gray序列,来一个一个的求此序列
if(j<(p/2)){
si[j] = "0" + s1[j];//原始序列前面加上"0"
}else{
si[j] = "1" + s1[p-j-1];//原始序列反序,前面加上"1"
}
}
s1 = si;//把求得的si,附给s1,以便求下一个Gray序列
}
for(int i=0;i<num;i++){
System.out.println(s1[i]);
}
}
}