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

vector<vector<string> > res;

bool isAnagram(string s1,string s2){
    int A[30];
	memset(A,0,sizeof(A));
	int size1=s1.size();
	int size2=s2.size();
	if(size1!=size2) return false;
	for(int i=0;i<size1;i++){ A[s1[i]-'a']++; A[s2[i]-'a']--;}
	for(int i=0;i<30;i++) if(A[i]!=0) return false;
	return true;
}

int main(){
	int n;
	scanf("%d",&n);
	vector<string> V;
	string str;
	for(int i=0;i<n;i++){ cin>>str; V.push_back(str);}
	bool taken[n];
	memset(taken,false,sizeof(taken));
	int k=0;
	for(int i=0;i<n;i++){
		if(taken[i]) continue;
		taken[i]=true;
		res[k].push_back(V[i]);
		for(int j=0;j<n;j++){
			if(i==j) continue;
			if(taken[j]) continue;
			if(isAnagram(V[i],V[j])){ res[k].push_back(V[j]); taken[j]=true;}
		}
		++k;
	}
	int r=res.size();
	for(int i=0;i<r;i++) sort(res[i].begin(),res[i].end());
	sort(res.begin(),res.end());
	for(int i=0;i<r;i++){
		for(int j=0;j<res[i].size();j++) cout<<res[i][j]<<" ";
		cout<<"\n";
	}
	return 0;
}