#include<stdio.h> #include<string.h> int cmp(int* a, int* b) { //判断字母数量是否相同 for (int i = 0; i < 26; i++) if (a[i] != b[i]) return 1; return 0; } int main() { char arr[1000][10] = {0}; int n = 0; int count = 0; scanf("%d", &n); for (int i = 0; i < n; i++) scanf("%s", &arr[i]); char word[10] = {0}; scanf("%s", word); int k = 0; scanf("%d", &k); int len1 = strlen(word); int hashmap_word[26] = {0}; int hashmap[26] = {0}; for (int i = 0; i < len1; i++) hashmap_word[word[i] - 'a']++; for (int i = 0; i < n; i++) { int len2 = strlen(arr[i]); if ( len2 == len1 && strcmp(word, arr[i]) != 0) for (int j = 0; j < len2; j++) hashmap[arr[i][j] - 'a']++; if (cmp(hashmap, hashmap_word)) arr[i][0] ='~'; //只要比z大就行,目的是让字符串排到兄弟单词的后面 else count++; memset(hashmap, 0, sizeof(int) * 26); } for (int i = 0; i < n; i++) { //排序,交换 for (int j = 0; j < n - i - 1; j++) if (strcmp(arr[j], arr[j + 1]) > 0) { char tmp[10] = {0}; memcpy(tmp, arr[j], 10); memcpy(arr[j], arr[j + 1], 10); memcpy(arr[j + 1], tmp, 10); } } printf("%d\n", count); if (k < count + 1) printf("%s", arr[k - 1]); return 0; }