import java.util.*; /** * @Author kyp * @Date 21-9-15 &{TIME} */ public class Main { /** * 定义一个单词的“兄弟单词”为:交换该单词字母顺序(注:可以交换任意次),而不添加、删除、修改原有的字母就能生成的单词。 * 兄弟单词要求和原来的单词不同。例如:ab和ba是兄弟单词。ab和ab则不是兄弟单词。 * 现在给定你n个单词,另外再给你一个单词str,让你寻找str的兄弟单词里,按字典序排列后的第k个单词是什么? * 注意:字典中可能有重复单词。本题含有多组输入数据。 * * 输入描述: * 先输入单词的个数n,再输入n个单词。 再输入一个单词,为待查找的单词x 最后输入数字k * 输出描述: * 输出查找到x的兄弟单词的个数m 然后输出查找到的按照字典顺序排序后的第k个兄弟单词,没有符合第k个的话则不用输出。 * */ public static void main(String[] args) { //String a = "6 cab ad abcd cba abc bca abc 1"; Scanner sc = new Scanner(System.in); while(sc.hasNextLine()) { String[] s = sc.nextLine().split(" "); List<String> list = new ArrayList<>(); int b = Integer.parseInt(s[0]); for (int i = 1; i <= b; i++) { String s1 = s[b + 1]; char[] chars1 = s[i].toCharArray(); if (s[b+1].length()==s[i].length() && !s[b+1].equals(s[i])){ for (char c : chars1) { s1 = s1.replaceFirst(String.valueOf(c),""); } if (s1.equals("")){ list.add(s[i]); } } } /*for (String s1 : list) { System.out.println(s1); }*/ Collections.sort(list); System.out.println(list.size()); if (list.size()>=Integer.parseInt(s[s.length - 1])){ System.out.println(list.get(Integer.parseInt(s[s.length - 1]) - 1)); } } } }