Problem

There is a bundle of $ n $ cards, with $ i $ written on the $ i $ th card from the bottom. Shuffle this bundle as defined below $ q $ times.


* When looking at the bundle from below, consider a bundle $ x $ made by stacking odd-numbered cards on top, and a bundle $ y $ made by stacking even-numbered cards on top. Then do whatever you like out of the following $ 2 $.
* Operation $ 0 $: Put the bundle $ y $ on the bundle $ x $ to make a bundle of $ 1 $.
* Operation $ 1 $: Put the bundle $ x $ on the bundle $ y $ to make a bundle of $ 1 $.



For example, if you consider shuffling $ 1 $ times for a bundle of $ 6 $ cards (123456 from the bottom), the bundle you get when you perform the operation $ 0 $ is ~~ 246135 ~~ from the bottom. 135246, the bundle obtained by performing the operation $ 1 $ is ~~ 135246 ~~ 246135 from the bottom. (Corrected at 14:52)

After $ q $ shuffle, I want the card with $ k $ to be $ d $ th from the bottom of the bunch.
If possible, print $ q $ of shuffle operations in sequence, and if not, print $ -1 $.

Constraints

The input satisfies the following conditions.

* $ 2 \ le n \ le 10 ^ {15} $
* $ 1 \ le q \ le 10 ^ 6 $
* $ 1 \ le k, d \ le n $
* $ n $ is even

Input

The input is given in the following format.


$ n $ $ q $ $ k $ $ d $


Output

If it is possible to shuffle the conditions, output the shuffle operation on the $ q $ line.

If not possible, output $ -1 $.

Examples

Input

4 2 1 1


Output

0
0


Input

4 2 3 1


Output

0
1


Input

4 1 1 4


Output

-1


Input

7834164883628 15 2189823423122 5771212644938


Output

0
1
1
1
1
1
0
1
0
1
0
0
0
0
0
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> P;
typedef pair<int,P> P1;
typedef pair<P,P> P2;
#define pu push
#define pb push_back
#define mp make_pair
#define eps 1e-7
#define INF 1000000000
#define mod 1000000007 
#define fi first
#define sc second
#define rep(i,x) for(int i=0;i<x;i++)
#define repn(i,x) for(int i=1;i<=x;i++)
#define SORT(x) sort(x.begin(),x.end())
#define ERASE(x) x.erase(unique(x.begin(),x.end()),x.end())
#define POSL(x,v) (lower_bound(x.begin(),x.end(),v)-x.begin())
#define POSU(x,v) (upper_bound(x.begin(),x.end(),v)-x.begin())

ll n,q,k,d;
ll beg[1000005];
int main(){
	cin>>n>>q>>k>>d;
	ll cur = d; beg[0] = cur;
	rep(i,q){
		if(cur > n/2) cur -= n/2;
		cur = 2*cur-1;
		beg[i+1] = cur;
	}
	//cur+x = k (mod n)
	//x = k-cur (mod n)
	ll hoge = k-cur;
	hoge = (hoge%n+n)%n;
	if(q < 51 && hoge >= (1LL<<q)){
		puts("-1");
	}
	else{
		vector<int>vec;
		ll V = hoge;
		for(int i=0;V;i++,V/=2){
		    ll up = beg[q-i-1]+V/2;
		    while(up > n) up-=n;
		    if(up > n/2){
			    vec.pb( ((hoge>>i)&1) );   
		    }
		    else{
		        vec.pb( 1-((hoge>>i)&1) );   
		    }
		}
		while(vec.size() < q){
		    ll up = beg[q-vec.size()-1];
		    if(up > n/2){
			    vec.pb( 0 );   
		    }
		    else{
		        vec.pb( 1 );   
		    }
		}
		for(int i=0;i<q;i++) printf("%d\n",1-vec[i]);
	}
}
