We have a grid with (2^N - 1) rows and (2^M-1) columns. You are asked to write 0 or 1 in each of these squares. Let a_{i,j} be the number written in the square at the i-th row from the top and the j-th column from the left.

For a quadruple of integers (i_1, i_2, j_1, j_2) such that 1\leq i_1 \leq i_2\leq 2^N-1, 1\leq j_1 \leq j_2\leq 2^M-1, let S(i_1, i_2, j_1, j_2) = \displaystyle \sum_{r=i_1}^{i_2}\sum_{c=j_1}^{j_2}a_{r,c}. Then, let the oddness of the grid be the number of quadruples (i_1, i_2, j_1, j_2) such that S(i_1, i_2, j_1, j_2) is odd.

Find a way to fill in the grid that maximizes its oddness.

Constraints

* N and M are integers between 1 and 10 (inclusive).

Input

Input is given from Standard Input in the following format:


N M


Output

Print numbers to write in the grid so that its oddness is maximized, in the following format:


a_{1,1}a_{1,2}\cdots a_{1,2^M-1}
a_{2,1}a_{2,2}\cdots a_{2,2^M-1}
\vdots
a_{2^N-1,1}a_{2^N-1,2}\cdots a_{2^N-1,2^M-1}


If there are multiple solutions, you can print any of them.

Example

Input

1 2


Output

111
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,ll>pii;
typedef vector<int>vi;

#define rep(i,a,b) for(int i=(a);i<(b);i++)
#define fi first
#define se second
#define de(x) cout<<#x<<"="<<x<<"\n"
#define dd(x) cout<<#x<<"="<<x<<" "
#define pb(x) push_back(x)
#define all(x) x.begin(),x.end()
#define sz(x) (int)x.size()
#define lowbit(a) ((a)&-(a))
#define per(i,a,b) for(int i=(b)-1;i>=(a);--i)
const int N=2e3+5;
const ll mod = 1e9 +7;
int n,m;
int ans[N][N],s[N][N];
int sub(int x,int y){
	int ss = 0;
	if(x > 0)ss += s[x-1][y];
	if(y > 0)ss += s[x][y-1];
	if(x >0 && y > 0)ss -= s[x-1][y-1];
	ss = (ss%2 + 2)%2;
	return ss;
}
int main()
{
	cin>>n>>m;
	int mx = max(n,m);
	int len = (1<<mx);
	ans[1][1] = s[1][1] = 1;
	for(int i = 4;i<=len;i*=2){
		for(int j = 0;j < i/2;j++){
			for(int k = 0;k<i/2;k++){
				s[j + i/2][k] = s[j][k +  i/2] = s[j][k];
				s[j + i/2][k + i/2] = (s[j][k] + 1)%2;
			}
		}
		for(int j = 0;j < i/2;j++){
			for(int k = 0;k<i/2;k++){
				ans[j][k + i/2] = (s[j][k + i/2] - sub(j,k + i/2) + 2)%2;
				ans[j + i/2][k] = (s[j + i/2][k] - sub(j + i/2,k) + 2)%2;
				ans[j + i/2][k + i/2] = (s[j + i/2][k + i/2] - sub(j + i/2,k + i/2) + 2)%2;
				
			}
		}
	}
	rep(i , 1 , (1<<n)){
		rep(j , 1 , (1<<m)){
			cout<<ans[i][j];
		}
		cout<<"\n"; 
	}
	return 0;	
}

