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;
#define PII pair<int, int>
#define PLL pair<LL, LL>
#define VI vector<int>
#define VPII vector<PII>
#define LL long long
#define LD long double
#define f first
#define s second
#define MP make_pair
#define PB push_back
#define pb pop_back
#define ALL(c) (c).begin(), (c).end()
#define SIZ(c) (int)(c).size()
#define REP(i, n) for(int i = 0; i < (int)(n); ++i)
#define FOR(i, b, e) for(int i = (b); i <= (int)(e); ++i)
#define FORD(i, b, e) for(int i = (b); i >= (int)(e); --i)

#define Sim template<class n
Sim, class s> ostream & operator << (ostream &p, pair<n, s> x)
{return p << "<" << x.f << ", " << x.s << ">";}
Sim> auto operator << (ostream &p, n y) -> 
typename enable_if<!is_same<n, string>::value, decltype(y.begin(), p)>::type 
{int o = 0; p << "{"; for(auto c: y) {if(o++) p << ", "; p << c;} return p << "}";}
void dor() {cerr << endl;}
Sim, class...s> void dor(n p, s...y) {cerr << p << " "; dor(y...);}
Sim, class s> void mini(n &p, s y) {if(p>y) p = y;}
Sim, class s> void maxi(n &p, s y) {if(p<y) p = y;}
#ifdef DEB
#define debug(...) dor(__FUNCTION__, ":", __LINE__, ": ", __VA_ARGS__)
#else
#define debug(...)
#endif 

#define I(x) #x " = ", (x), " "
#define A(a, i) #a "[" #i " = ", i, "] = ", a[i], " "
const int M = 1024;

int T[M][M];

void jebaj(int x1, int x2, int y1, int y2, int l)
{
	int a = l / 2;
	T[x1 + a][y1 + a] = 1;
	if (l > 1)
	{
		jebaj(x1, x1 + a - 1, y1, y1 + a - 1, a - 1);
		jebaj(x1 + a + 1, x2, y1, y1 + a - 1, a - 1);
		jebaj(x1, x1 + a - 1, y1 + a + 1, y2, a - 1);
		jebaj(x1 + a + 1, x2, y1 + a + 1, y2, a - 1);
	}
}

int32_t main()
{
	int n, m;
	scanf("%d%d", &n, &m);
	int lol = (1<<10);
	jebaj(1, lol - 1, 1, lol - 1, lol - 1);
	FOR(i, 1, (1<<n) - 1)
	{
		FOR(j, 1, (1<<m) - 1)
		{
			printf("%d", T[i][j]);
		}
		printf("\n");
	}
}












