#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef pair ii; typedef vector vi; typedef vector vii; typedef set si; typedef set 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; }