#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

const int MAXN = 200, MAXS = 20, MAXC = 30;

int n, l[MAXN], b[MAXC], d[MAXC], r[MAXC], p[MAXC], m[MAXC][MAXC];
char s[MAXN][MAXS];

int abeceda(int);

int main() {
	scanf("%d", &n);
	
	for(int i = 0; i < n; ++i)
		scanf("%s", s[i]);
	
	for(int i = 0; i < n; ++i) {
		l[i] = strlen(s[i]);
		for(int j = 0; j < l[i]; ++j) {
			s[i][j] -= 'a' - 1;
			p[s[i][j]] = 1;
		}
	}
	
	int br = 0;
	for(int i = 1; i < MAXC; ++i)
		if(p[i])
			++br;
	
	for(int i = 0; i < n - 1; ++i) {
		int p, k = min(strlen(s[i]), strlen(s[i + 1]));
		for(p = 0; p < k && s[i][p] == s[i + 1][p]; ++p);
		
		if(p < k)
			m[s[i][p]][s[i + 1][p]] = 1;
	}
	
	/*for(int i = 1; i < MAXC; ++i) {
		printf("%c:", i + 'a' - 1);
		for(int j = 1; j < MAXC; ++j)
			if(m[i][j])
				printf(" %c", j + 'a' - 1);
		printf("\n");
	}
	return 0;*/
	
	int id = -1;
	for(int i = 1; i < MAXC; ++i) {
		int c = abeceda(i);
		if(c == -1) {
			id = -1;
			break;
		}
		
		if(id == -1 || c > d[id])
			id = i;
	}
	
	/*printf("%c %d\n", id + 'a' - 1, d[id]);
	return 0;*/
	
	if(id == -1)
		printf("!\n");
	else if(d[id] < br)
		printf("?\n");
	else {
		for(int i = id; i; i = r[i])
			printf("%c", i + 'a' - 1);
		
		printf("\n");
	}
	
	return 0;
}

int abeceda(int x) {
	if(b[x] == 1)
		return -1;
	
	if(b[x] == 2)
		return d[x];
	
	b[x] = 1;
	
	int mx = 0;
	for(int i = 1; i < MAXC; ++i)
		if(m[x][i]) {
			int c = abeceda(i);
			if(c == -1) {
				mx = -2;
				break;
			}
			
			if(c > mx) {
				r[x] = i;
				mx = c;
			}
		}
	
	b[x] = 2;
	d[x] = mx + 1;
	
	return d[x];
}
