#include "stdio.h" 
#include "algorithm" 
#include "stdlib.h" 
#include "set" 
#include "map" 
#include "queue" 
#include "vector"
#include "math.h" 
#include "time.h"
#include "stack" 

// #define int long long

int Max(int a, int b) {
	return a > b? a: b; 
}
int Min(int a, int b) {
	return a < b? a: b; 
}
int Abs(int a) {
	return a < 0? -a: a; 
}
long long sqr(int a) {
	return (long long)a * a; 
}
int qpow(int a, int b) {
	int ans = 1; 
	while (b) {
		if (b & 1) 
			ans = 1ll * a * ans % 1000000007; 
		a = 1ll * a * a % 1000000007; 
		b >>= 1; 
	}
	return ans; 
}
int gcd(int a, int b) {
	return b? gcd(b, a % b): a; 
}

int T; 
int n, m; 
int pr[200010][2]; 

struct Qt {
	int ls[4000010], rs[4000010], mx[4000010]; 
	int rt, cnt; 
	void pushup(int x) {
		if (mx[rs[x]]) 
			mx[x] = mx[rs[x]]; 
		else 
			mx[x] = mx[ls[x]]; 
	}
	void pushdown(int x) {
		if (mx[x]) 
			return; 
		if (ls[x]) 
			mx[ls[x]] = 0; 
		if (rs[x]) 
			mx[rs[x]] = 0; 
	}
	void upd(int &x, int pos, int val, int l = 0, int r = m) {
		if (!x) 
			x = ++ cnt; 
		if (l == r) {
			mx[x] = val; 
			return; 
		}
		pushdown(x); 
		int mid = (l + r) >> 1; 
		if (pos <= mid) 
			upd(ls[x], pos, val, l, mid); 
		else 
			upd(rs[x], pos, val, mid + 1, r); 
		pushup(x); 
	}
	void del(int x, int posl, int posr, int l = 0, int r = m) {
		if (posl > posr || !x) 
			return; 
		if (l >= posl && r <= posr) {
			mx[x] = 0; 
			return; 
		}
		pushdown(x); 
		int mid = (l + r) >> 1; 
		if (posl <= mid) 
			del(ls[x], posl, posr, l, mid); 
		if (posr > mid) 
			del(rs[x], posl, posr, mid + 1, r); 
		pushup(x); 
	}
	int qry(int x, int posl, int posr, int l = 0, int r = m) {
		if (!x) 
			return 0; 
		if (l >= posl && r <= posr) 
			return mx[x]; 
		pushdown(x); 
		int mid = (l + r) >> 1, ans = 0; 
		if (posr > mid) 
			ans = qry(rs[x], posl, posr, mid + 1, r); 
		if (posl <= mid && !ans) 
			ans = qry(ls[x], posl, posr, l, mid); 
		return ans; 
	}
} lt, rt; 

void prt(int x, int opt) {
	if (pr[x][opt] - 1) 
		prt(pr[x][opt], !opt); 
	for (int i = pr[x][opt] + 1; i <= x; ++ i) 
		printf("%d ", opt); 
}

int main() {
	// scanf("%d", &T); 
	T = 1; 
	while (T --) {
		scanf("%d%d", &n, &m); 
		lt.upd(lt.rt, 0, 1); 
		rt.upd(rt.rt, 0, 1); 
		int k, ll, lr, rl, rr, flg1, flg2; 
		for (int i = 2; i <= n + 1; ++ i) {
			flg1 = 0, flg2 = 0; 
			scanf("%d%d%d%d%d", &k, &ll, &lr, &rl, &rr); 
			if (ll <= k && k <= lr) {
				pr[i][0] = rt.qry(1, rl, rr); 
				if (pr[i][0]) 
					flg1 = 1; 
			}
			if (rl <= k && k <= rr) {
				pr[i][1] = lt.qry(1, ll, lr); 
				if (pr[i][1]) 
					flg2 = 1; 
			}
			if (!flg1 && !flg2) {
				// printf("%d %d %d\n", i, flg1, flg2); 
				// printf("%d\n", rt.qry(1, rl, rr)); 
				puts("No"); 
				return 0; 
			}
			if (flg1 && flg2) {
				lt.del(1, 0, ll - 1), lt.del(1, lr + 1, m); 
				rt.del(1, 0, rl - 1), rt.del(1, rr + 1, m); 
				lt.upd(lt.rt, k, i), rt.upd(rt.rt, k, i); 
			}
			if (flg1 && !flg2) {
				lt.del(1, 0, m); 
				lt.upd(lt.rt, k, i); 
				rt.del(1, 0, rl - 1), rt.del(1, rr + 1, m); 
			}
			if (!flg1 && flg2) {
				lt.del(1, 0, ll - 1), lt.del(1, lr + 1, m); 
				rt.del(1, 0, m); 
				rt.upd(rt.rt, k, i); 
			}
		}
		puts("Yes"); 
		pr[n + 1][0]? prt(n + 1, 0): prt(n + 1, 1); 
	}
	// #ifndef ONLINE_JUDGE 
	// 	while (1); 
	// #endif 
}

// Max(l, n)
// 
// 
// 
// 
// 
// 

// dp[i][j][k]: now=i, insert(j, j+1), Max=k  

// dp[i][j][k] -> dp[i + 1][j][k], 