#include <bits/stdc++.h>
using namespace std;
int gi() {
	int res = 0, w = 1;
	char ch = getchar();
	while (ch != '-' && !isdigit(ch)) ch = getchar();
	if (ch == '-') w = -1, ch = getchar();
	while (isdigit(ch)) res = res * 10 + ch - '0', ch = getchar();
	return res * w;
}
const int MAX_N = 1e5 + 5;
int N, M, K[MAX_N], xl[MAX_N], xr[MAX_N], yl[MAX_N], yr[MAX_N];
#define fi first
#define se second
set<pair<int, int> > Sx, Sy; //x = k, y = k
map<pair<int, int>, pair<int, int> > p[2];
int ans[MAX_N];
int main () {
#ifndef ONLINE_JUDGE
    freopen("cpp.in", "r", stdin);
#endif
	N = gi(), M = gi();
	for (int i = 1; i <= N; i++) K[i] = gi(), xl[i] = gi(), xr[i] = gi(), yl[i] = gi(), yr[i] = gi();
	Sx.insert({0, 0});
	Sy.insert({0, 0});
	for (int i = 1; i <= N; i++) {
		int fx = Sx.size(), fy = Sy.size();
		if (fx) p[1][{K[i - 1], i}] = *Sx.begin(), Sy.insert({K[i - 1], i});
		if (fy) {
			if (*Sy.begin() != make_pair(K[i - 1], i)) p[0][{K[i - 1], i}] = *Sy.begin();
			else p[0][{K[i - 1], i}] = *next(Sy.begin());
			Sx.insert({K[i - 1], i});
		}
		if (K[i] < xl[i] || K[i] > xr[i]) Sx.clear();
		if (K[i] < yl[i] || K[i] > yr[i]) Sy.clear();
		while (Sx.size() && Sx.begin()->fi < yl[i]) Sx.erase(Sx.begin());
		while (Sx.size() && Sx.rbegin()->fi > yr[i]) Sx.erase(--Sx.end());
		while (Sy.size() && Sy.begin()->fi < xl[i]) Sy.erase(Sy.begin());
		while (Sy.size() && Sy.rbegin()->fi > xr[i]) Sy.erase(--Sy.end());
		if (!Sx.size() && !Sy.size()) return puts("No") & 0;
	}
	puts("Yes");
	auto ed = Sx.size() ? *Sx.begin() : *Sy.begin();
	int op = Sx.size() ? 0 : 1;
	for (int i = ed.se; i <= N; i++) ans[i] = op;
	do {
		auto t = ed; int lst = t.se;
		ed = p[op][t], op ^= 1;
		for (int i = ed.se; i < lst; i++) ans[i] = op;
	} while (ed.se != 0);
	for (int i = 1; i <= N; i++) printf("%d ", ans[i]);
	putchar('\n');
    return 0;
}