#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <limits.h>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <vector>
using namespace std;
typedef pair<int,int> ii;
typedef vector<int> vi;
typedef vector<ii> vii;
typedef set<int> si;
typedef set<ii> sii;
#define MP make_pair
#define PB push_back
#define FOR(i,a,b) for ( int i = int(a); i <= int(b); ++i )
#define FORD(i,a,b) for ( int i = int(a); i >= int(b); --i )
#define TR(c,it) for( typeof(c.begin()) it = c.begin(); it != c.end(); ++it )
#define TRR(c,it) for( typeof(c.rbegin()) it = c.rbegin(); it != c.rend(); ++it )
const int INF = 1<<29;
typedef long long int lli;
bool graph[26][26];
bool used [26];
char str [27];
void print( int len )
{
FOR( i, 0, len-2 )
FOR( j, i+1, len-1 )
if ( graph[ str[i]-'a' ][ str[j]-'a' ] )
return;
printf("%s\n", str);
}
void solve( )
{
int tmp = 0;
FOR( i, 0, 25 )
if ( used[i] )
str[ tmp++ ] = i+'a';
str[tmp] = '\0';
do {
print( tmp );
} while ( next_permutation( str, str+tmp ) );
}
int main( )
{
char v1, v2, c;
for ( int caseNr = 1; ; ++caseNr )
{
c = '#';
memset( used, 0, sizeof( used ) );
memset( graph, 0, sizeof( graph ) );
while ( scanf("%c%c", &v1, &c) == 2 )
{
used[ v1-'a' ] = 1;
if ( c == '\n' )
break;
}
if ( c == '#' )
break;
if ( caseNr != 1 )
printf("\n");
while ( scanf("%c %c%c", &v1, &v2, &c) >= 2 )
{
graph[ v2-'a' ][ v1-'a' ] = 1;
if ( c == '\n' )
break;
}
solve( );
}
return 0;
}