#include <bits/stdc++.h>
using namespace std;

int n, k;
vector<string> v;
set<string> s;

void dfs(string str, int flag, int count) {
    if (count == k) {
        s.insert(str);
        return ;
    }
    for (int i = 0; i < n; i++) {
        if (flag & (1 << i)) continue;
        dfs(str + v[i], flag | (1 << i), count + 1);
    }
}

int main() {
    while (cin >> n >> k, n || k) {
        v.resize(0);
        for (int i = 0; i < n; i++) {
            string str;
            cin  >> str;
            v.push_back(str);
        }

        s.clear();
        dfs("", 0, 0);
        cout << s.size() << endl;
    }

    return 0;
}
#include <bits/stdc++.h>
using namespace std;

string ab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";

int main(){
    cin.tie(0);
    ios::sync_with_stdio(false);
    int n, key[100];
    string cip;
    while(cin >> n && n){
        for(int i = 0; i < n; i++){
            cin >> key[i];
        }
        cin >> cip;
        for(int i = 0; i < cip.size(); i++){
            int ind = lower_bound(ab.begin(), ab.end(), cip[i])-ab.begin();
            cout << ab[(ind - key[i%n] + 52) % 52];
        }
        cout << endl;
    }
    return 0;
}