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

typedef long long int ll;

int N, D;
vector<string> names;
//
//ll to_int(string s){
//    const int MOD = 1000000009;
//    ll res = 0;
//    for(auto c: s){
//        res = (res*26 + (c - 'a')) % MOD;
//    }
//    return res;
//}

void solve(){
    sort(names.begin(), names.end());
    
    map<string, set<int>> mp;
    for(int ni=0; ni<N; ni++){
        string name = names[ni];
        int L = name.size();
        
        //delete
        for(int i=0; i<L; i++){
            string t = name;
            t.erase(t.begin()+i);
            mp[t].insert(ni);
        }
        //insert
        for(int i=0; i<=L; i++){
            for(char c='a'; c<='z'; c++){
                string t = name;
                t.insert(t.begin()+i, c);
                mp[t].insert(ni);
            }
        }
        //replace
        for(int i=0; i<L; i++){
            for(char c='a'; c<='z'; c++){
                string t = name;
                t[i] = c;
                mp[t].insert(ni);
            }
        }
        //swap
        for(int i=0; i<L-1; i++){
            string t = name;
            swap(t[i], t[i+1]);
            mp[t].insert(ni);
        }
    }
    if(D == 1){
        int cnt = 0;
        for(int ni=0; ni<N; ni++){
            string name = names[ni];
            if(mp[name].size() > 1){
                for(auto v: mp[name]){
                    if(v <= ni) continue;
                    cout << name << "," << names[v] << endl;
                    cnt++;
                }
            }
        }
        cout << cnt << endl;
    }
    if(D == 2){
        set<pair<int, int>> s;
        for(auto v: mp) if(v.second.size() > 1){
            vector<int> vec;
            for(auto vv: v.second) vec.push_back(vv);
            for(int i=0; i<vec.size(); i++){
                for(int j=i+1; j<vec.size(); j++){
                    s.insert(make_pair(vec[i], vec[j]));
                }
            }
        }
        for(auto v: s){
            cout << names[v.first] << "," << names[v.second] << endl;
        }
        cout << s.size() << endl;
    }

}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    
    while(cin>>N, N){
        cin >> D;
        names.resize(N);
        for(auto &v: names) cin >> v;
        solve();
    }
    
    return 0;
}