#CF1009G. 允许的字母
允许的字母
G. 允许的字母
每次测试时间限制:2 秒
每次测试内存限制:256 兆字节
题目描述
Polycarp 刚刚启动了他的新创业项目。市场空间很大,发展方向也很明确,所以他很快就找到了一些愿意赞助公司的投资人。不过,他还没有给公司起好名字!
实际上,Polycarp 已经想好了一个名字,但名字总是越改越好。因此,他希望通过交换名字中某些位置的字母来得到一个更好的名字。字母不一定要相邻才能交换。
此外,每位投资人都选择了名字中的一个位置,并指定了该位置上可以出现的字母集合。不同投资人选择的位置互不相同。如果某个位置没有被任何投资人选择,那么该位置可以出现任何字母。
最后,Polycarp 认为字典序最小的名字是最好的。(就像 Google 为什么改名为 Alphabet 一样?)
更正式地说,给定一个由小写拉丁字母 'a' 到 'f' 组成的字符串。你可以在任意位置之间任意次地交换字母(也可以不交换)。
你需要得到的名字要满足:每个位置上的字母都在该位置允许的字母集合中。
请输出能够得到的字典序最小的名字。
如果无法得到任何合法的名字,则输出 "Impossible"。
输入格式
第一行是一个字符串 ()—— Polycarp 最初想出的名字。字符串仅由小写字母 'a' 到 'f' 组成。
第二行是一个整数 ()—— 投资人的数量。
接下来的 行中,第 行包含一个整数 和一个非空的允许字符组成的字符串()。该字符串中的字母是 'a' 到 'f' 且互不相同。
互不相同。
如果某个位置没有出现在投资人的要求中,则该位置允许任何字母。
输出格式
如果无法得到任何合法的名字,输出 "Impossible"。
否则,输出通过交换 中的字母得到的字典序最小的字符串,且每个位置上的字母都在该位置允许的集合中。
示例
示例输入 1
bedefead
5
2 e
1 dc
5 b
7 ef
6 ef
示例输出 1
deadbeef
示例输入 2
abacaba
0
示例输出 2
aaaabbc
示例输入 3
fc
2
1 cfab
2 f
示例输出 3
cf