[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
提示
请不要提交!
题目来源
没有写明来源