[Neerc2016]Binary Code

时间限制:100s      空间限制:512MB

题目描述

一个二进制码是指一个含n个元素的集合,集合里的每一个数都是一个二进制数。一个前缀码是指一个含n个元素的
集合s,对于任意的i!=j,都有s[i]不是s[j]的前缀且s[j]不是s[i]的前缀。现ls在进行一些不可描述的活动时偶
然发现了一张古老的手纸,上面写着n行码(组成了一个二进制码),然而一些不可描述的污点盖住了某些码的至
多一个字符(也就是每一个二进制码最多只有一个字符看不清),现在ls觉得其中奥妙重重,于是就想向你请教人
生的经验:能否将这些污点替代为0或1使得这n行码能组成一个二进制前缀码。


输入格式

第一行一个整数n,n<=500000。
接下来n行每行一个字符串,仅包含三种字符:0,1,?(?代表这是污点),字符总长度不超过500000。


输出格式

第一行输出一行YES或NO表示能否将这些污点替代为0或1使得这n行码能组成一个前缀码。
如果输出是YES,还要输出n行表示将污点替代为0或1后的字符串。


样例输入

4
00?
0?00
?1
1?0

样例输出

YES
000
0100
11
100

提示

 请不要提交!


题目来源

没有写明来源