#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;

int Search_Brother_Word(int num){
    string str;
    string word;
    int BW_index;//输出兄弟单词的序号,在vec_BW中要减1输出
    vector <string> vec;
    vector <string> vec_BW;
    for(int i = 0; i < num; i++){
        cin >> str;
        vec.push_back(str);
    }
    sort(vec.begin(),vec.end());
    cin >> word;
    cin >> BW_index;
    string word_copy = word; //拷贝一份指定的单词,作为基准比较(字母顺序未变动
    sort(word.begin(),word.end());
    for(int i = 0; i < vec.size(); i++){
        if(vec[i].size() == word.size()){
            if(vec[i] != word_copy){//长度相同且字母顺序不同的单词,才可能是兄弟单词,这里反复用单词的拷贝来作为基准
                string copy = vec[i]; //提前拷贝一份字典中的单词,作为后续写入兄弟单词字典的样本(需要的话)
                sort(vec[i].begin(),vec[i].end());
                if(vec[i] == word){//原本不相同的单词,经过字母排序后相同,才是互为兄弟单词
                    vec_BW.push_back(copy);//把排序前的加入兄弟单词
                }
            }
        }
    }
    
    //分类输出结果
    //兄弟单词字典为空
    if(vec_BW.size() == 0){
        cout << 0 << endl;
    }
    
    //兄弟单词字典不为空,但待查找的兄弟单词不存在
    else if(((vec_BW.size() > 0) && (vec_BW.size() < BW_index)) || ((vec_BW.size() > 0) && (BW_index < 1))){
        cout << vec_BW.size() << endl;
    }    
    
    //兄弟单词字典不为空,且待查找的兄弟单词存在
    else if(((vec_BW.size() > 0) && (vec_BW.size() >= BW_index)) && (BW_index >= 1)){
        cout << vec_BW.size() << endl << vec_BW[BW_index - 1]  << endl;
    }    
    return 0;    
}

int main(){
    
    int num;
    while(cin >> num){
        Search_Brother_Word(num);
    }
    return 0;
}