java解法:
1)明确两种情况是必须排除的:长度与目标单词的长度不等则肯定不是兄弟单词;长度相等的时候,待测单词等于目标单词的肯定不是兄弟单词;排除这两种情况。
2)排除上面两种情况之后,就判断待测单词是否可以由目标单词打乱字母顺序得来:可将待测单词和目标单词转换成字符数组,对它们进行排序,然后逐个比较是否全相同,排序后的两个字符数组相等的则为兄弟单词
注意:最后得到的兄弟单词是允许有重复出现的,所以不要用集合HashSet等,用长度可变的ArrayList

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            int n = Integer.parseInt(sc.next());
            String[] str = new String[n];
            for(int i = 0; i<n; i++){
                str[i] = sc.next();
            }
            String s = sc.next();
            int k = Integer.parseInt(sc.next());

            ArrayList<String> ts = new ArrayList<>();
            for(int i=0; i<n; i++){
                if(brother(s, str[i])){
                    ts.add(str[i]);
                }
            }
            System.out.println(ts.size());
            Collections.sort(ts);
            if(k>ts.size()) System.out.println();
            else System.out.println(ts.get(k-1));
        }
    }
    public static boolean brother(String s1, String s2){
        int len1 = s1.length();
        int len2 = s2.length();
        if(len1 != len2) return false;//如果两个单词长度不相等,那肯定不是兄弟单词
        int n = 0;
        for(int i=0; i<len1; i++){   //如果待测单词等于它本身,则不是兄弟单词
            if(s1.charAt(i)==s2.charAt(i)) n++;
        }
        if(n==len1) return false;
        char[] ch1 = s1.toCharArray();
        char[] ch2 = s2.toCharArray();
        //排除上面长度不等、等于目标单词两种情况后,将单词转换为字符数组,然后排序,再逐个对比是否相等
        Arrays.sort(ch1);
        Arrays.sort(ch2);
        boolean flag = true;
        for(int i=0; i<len1; i++){
            if(ch1[i] != ch2[i]) flag = false;
        }
        if(flag) return true;
        else return false;
    }
}