#include <cstdio>
#include <set>
#include <cstring>
#include <string>

using namespace std;

int n, maxlen, uk;
char s[110][12];
set< char > SS;
set< char > S[30];


bool isti( int a, int b, int t ) {
	for( int i = 0; i < t; ++i ) {
		if( s[a][i] != s[b][i] ) return 0;
	}
	return 1;
}

void nesto( int t ) {
	for( int i = 1; i < n; ++i ) {
		if( s[i][t] != s[i-1][t] && isti( i, i - 1, t ) ) {
			S[ s[i-1][t] - 'a' ].insert( s[i][t] - 'a' );
		}
	}
}

void ubaci( int x, int y ) {
	for( set< char > :: iterator it = S[y].begin(); it != S[y].end(); ++it ) {
		S[x].insert( *it );		
	}
}

int main( void ) {

	scanf( "%d", &n );
	for( int i = 0; i < n; ++i ) {
		scanf( "%s", s[i] );
		int len = strlen( s[i] );
		maxlen = max( maxlen, len );
		for( int j = 0; j < len; ++j ) {
			SS.insert( s[i][j] - 'a' );
		}
	}

	for( int i = 0; i < maxlen; ++i ) {

		nesto( i );

		while( 1 ) {
			bool nja = 0;
			for( int i = 0; i < 26; ++i ) {
				for( set< char > :: iterator it = S[i].begin(); it != S[i].end(); ++it ) {
					int sajz = S[i].size();
					ubaci( i, *it );
					if( S[i].size() != sajz ) nja = 1;
				}
			}
			if( !nja ) break;
		}
	}

/*	for( int i = 0; i < 26; ++i ) {
		printf( "%c ", i + 'a' );
		for( set< char > :: iterator it = S[i].begin(); it != S[i].end(); ++it ) {
			printf( "%c ", *it + 'a');
		}
		printf( "\n" );
	} */

	for( int i = 0; i < 26; ++i ) {
		for( set< char > :: iterator it = S[i].begin(); it != S[i].end(); ++it ) {
			if( *it == i ) { printf( "!\n" ); return 0; }
		}
	}

	for( int i = 0; i < 26; ++i ) {
		uk += S[i].size();
	}

	int znj = SS.size();
	if( uk < znj * ( znj - 1 ) / 2 ) {
		printf( "?\n" );
		return 0;
	}

	if( uk > znj * ( znj - 1 ) / 2 ) {
		printf( "!\n" );
		return 0;
	}

	for( int i = 0; i < znj; ++i ) {
		int sol = -1;
		for( set< char > :: iterator it = SS.begin(); it != SS.end(); ++it ) {
			if( sol == -1 || S[*it].size() > S[sol].size() ) sol = *it;
		}
		printf( "%c", sol + 'a' );
		SS.erase( sol );
	}

    return 0;
}
