#include <bits/stdc++.h>
#define MOD 1000000007LL
using namespace std;
typedef long long ll;
typedef pair<string,string> P;

int n,d;
int ans=0;
set<string> mp[201][18];
int cnt[201][201];
vector<P> vec;
string str[201];

void dfs(int v,string s,int nd,int uk=0){
	if(nd==0){
		mp[v][s.size()].insert(s);
		for(int i=0;i<n;i++){
			if(mp[i][s.size()].find(s)!=mp[i][s.size()].end()){
				cnt[v][i]++;
				cnt[i][v]++;
			}
		}
		for(int i=0;i+1<s.size();i++){
			swap(s[i],s[i+1]);
			dfs(v,s,nd+1);
			swap(s[i],s[i+1]);
		}
		for(int i=0;i<s.size();i++){
			dfs(v,s.substr(0,i)+s.substr(i+1),nd+1);
			for(int j=0;j<26;j++){
				string gu="";
				gu+=('a'+j);
				dfs(v,s.substr(0,i)+gu+s.substr(i+1),nd+1,1);
				dfs(v,s.substr(0,i)+gu+s.substr(i),nd+1,1);
			}
		}
		for(int i=0;i<26;i++){
			string gu="";
			gu+=('a'+i);
			dfs(v,s+gu,nd+1);
		}
	}else if(nd==1){
		mp[v][s.size()].insert(s);
		if(d==2){
			for(int i=0;i<n;i++){
				if(mp[i][s.size()].find(s)!=mp[i][s.size()].end()){
					cnt[v][i]++;
					cnt[i][v]++;
				}
			}
		}
	}
}

void solve(){
	vec.clear();
	for(int i=0;i<n;i++){
		for(int j=0;j<18;j++){
			mp[i][j].clear();
		}
	}
	scanf("%d",&d);
	ans=0;
	memset(cnt,0,sizeof(cnt));
	for(int i=0;i<n;i++){
		cin >> str[i];
		dfs(i,str[i],0);
	}
	for(int i=0;i<n;i++){
		for(int j=0;j<i;j++){
			if(cnt[i][j]>0){
				ans++;
				vec.push_back(P(min(str[i],str[j]),max(str[i],str[j])));
			}
		}
	}
	sort(vec.begin(),vec.end());
	for(int i=0;i<vec.size();i++){
		cout << vec[i].first << "," << vec[i].second << endl;
	}
	printf("%d\n",ans);
}

int main(void){
	while(1){
		scanf("%d",&n);
		if(n==0)break;
		solve();
	}
	return 0;
}
