给定整数集合 D⊆{1,…,25}(允许的“邻差”)与总和 n,在 1..26(a..z)中找三元组 (w1,w2,w3) 满足:
并输出按字典序最小的字符串 w1w2w3(1→a,…,26→z)。若不存在输出 NO。
有一仅由 3 个小写字母组成的单词,将字母按字母表位置编导为 1~26(a=1,b=2,...,z=26),定义单词
w1w2w3 的“编码和”为 w1+w2+w3 。
现在给定一个整数,与个允许的邻差集合 D={d1,...,dk}。当且仅当同时满足:
w1+w2+w3=n ;
丨w1−w2丨∈D且丨w2−w3丨∈D ;
我们称 w1w2w3 为"合法"的三字母单词。请在所有合法单词中,输出字典序最小的那个;若不存在合法单词,输出 NO 。
【名词解释】
小写字母与编号的对应关系如下:
a↔1,b↔2,...,z↔26 。
字符串的字典序比较:从左到右逐个比较两个字符串的字符。如果在某个位置上字符不同,比较这两个字符的 ASCII 码顺序,ASCII 码小的字符串字典序也小。如果一直比较到其中一个字符串结束,则较短的字符串字典序更小。
每个测试文件均包含多组测试数据。第一行输入一个整数 t(1≤t≤104) ,代表数据组数,每组测试数据描述如下:
第一行输入两个整数 n,k(3≤n≤78;1≤k≤25) ;
第二行输入 k 个两两不同的整数 d1,d2,...,dk(1≤di≤25) ,表示集合 D={d1,...,dk}。
对于每一组测试数据,新起一行输出:
若存在合法单词,输出由 3 个小写字母组成的字符串(例如"abc");
否则输出 NO 。
输入
2
6 1
1
4 1
2
输出
abc
NO
说明
第 1 组:n=6,D={1}。取 w1=1,w2=2,w3=3 ,有 w1+w2+w3=6 且 ∣1−2∣=1∈D,∣2−3∣=1∈D,对应 "abc",且为字典序最小;
第 2 组:n=4,D={2}。不存在合法三元组,输出 NO 。