#P15736. 断开长串

断开长串

题目描述

调试员柯林拿到一个只包含 01? 的字符串 ss。其中问号的数量恰好为 a+ba+b

你需要把其中 aa 个问号替换为 0,把 bb 个问号替换为 1,得到一个二进制字符串 tt

f(t)f(t) 表示 tt 中最长的、由相同数字组成的连续子串长度。例如,111110000 都是由相同数字组成的连续子串。

你的目标是最小化 f(t)f(t),并输出任意一个达到最优值的字符串。

输入格式

第一行包含一个整数 tt,表示测试用例数量。

对于每个测试用例:

第一行包含三个整数 n,a,bn,a,b

第二行包含一个长度为 nn 的字符串 ss,只由字符 01? 组成。保证 ss 中问号的数量等于 a+ba+b

输出格式

对于每个测试用例,输出两行。

第一行输出一个整数,表示最小可能的 f(t)f(t)

第二行输出一个达到该值的字符串 tt。如果有多种答案,输出任意一种。

数据范围

  • 1t1051\le t\le 10^5
  • 1n2500001\le n\le 250000
  • 0a0\le a
  • 0b0\le b
  • 所有测试用例的 nn 之和不超过 250000250000

样例 1

输入

4
7 1 2
0?01??0
10 5 0
?000??0?0?
11 0 0
11001110100
15 2 4
?1?11?1??11100?

输出

1
0101010
10
0000000000
3
11001110100
4
110111101111001