#P16364. [2026年山东第二轮集训]萝卜内存

[2026年山东第二轮集训]萝卜内存

题目描述

小明制作了一个绿发的机器人。

这个机器人共有 3n3n 字节的内存,小明需要将其分成两个部分来运行程序,他将两个部分分别称作虚拟内存和现实内存(我也不知道他为什么要这么叫)。一般情况下,这个机器人都能自动进行内存的分配,从而保证程序的运行,然而,发生了罕见的多程序并行情况:有 qq 个程序要在同一时间运行,每个程序要求要么 [ai,bi][a_i,b_i] 内的内存均为现实内存,要么 [ci,di][c_i,d_i] 内的内存均为虚拟内存。由于程序并行过多,内存分配程序崩溃了。

当然,如果要求只是这样的话那可太好了,可是小明设计之初为了保证系统的稳定性,强制要求虚拟内存和现实内存均不可超过 2n2n 字节。这下小明和内存分配程序感同身受了,他现在急需一个帮手,来帮他分配内存,从而救活他的机器人,或者告诉他你的机器人没救了。

输入格式

本题有多组数据。

本题输入输出量较大,请选择较快的输入输出方式。

第一行输入一个正整数 TT,表示数据组数。

对于每组数据:

第一行两个正整数 n,qn,q,表示内存大小的参数和程序数量。

之后的 qq 行,每行四个正整数 ai,bi,ci,dia_i,b_i,c_i,d_i 表示程序的要求。

输出格式

对于每组数据,若无解输出一行一个字符串 No(宁——宁——萝——卜——);若有解,第一行一个字符串 Yes,第二行一个长为 3n3n 的 01 串,表示你的内存分配方案,其中第 ii 个位置是 00 表示其被分配为现实内存,否则为虚拟内存。若有多解,输出任意一解即可。

输入输出样例

样例输入1

2
1 3
1 1 2 2
1 2 3 3
1 1 3 3
1 3
1 1 2 2
2 2 3 3
3 3 1 1

样例输出1

Yes
011
No

其余样例见下发文件,其分别满足下表每一个子任务的限制。

数据范围

对于 100%100\% 的数据,$1\le T\le10^5,1\le n\le3\times10^4,1\le q\le10^5,1\le\sum n\le3\times10^5,1\le\sum q\le10^6,1\le a_i\le b_i\le3n,1\le c_i\le d_i\le3n$。

测试点编号 nn\le qq\le n\sum n\le q\sum q\le 特殊性质
1,21,2 55 10001000 3×1053\times10^5 3×1043\times10^4
3,43,4 66 10510^5 10610^6
5,6,75,6,7 3030 1717 300300
8,9,108,9,10 3×1043\times10^4 10510^5 3×1043\times10^4 10510^5 (biai+1)(dici+1)106\sum(b_i-a_i+1)(d_i-c_i+1)\le10^6
11,1211,12 i,ai=bi\orci=di\forall i,a_i=b_i\or c_i=d_i
1313 bi<cib_i<c_i
14,15,1614,15,16
17,18,19,2017,18,19,20 3×1053\times10^5 10610^6