//26^8>(4*10^5)^2???????????????8????????\???. 26^5>(4*10^5)*8???????????????5????????\???. ??¨??¨????????????.
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;

vector<bool> is_exist[6];

int encode(string s) {
	int ret = 0;
	int mul = 1;
	
	for (int i = (int)s.length() - 1; i >= 0; i--) {
		ret += (s[i] - 'a') * mul;
		mul *= 26;
	}
	return ret;
}

string decode(int id, int length) {
	string str;
	int mul = 1;
	
	for (int i = length - 1; i >= 0; i--) {
		int val = (id / mul) % 26;
		str += (char)(val + 'a');
		mul *= 26;
	}
	
	string ret;
	for (int i = length - 1; i >= 0; i--) {
		ret += str[i];
	}
	
	return ret;
}

void input() {
	int n;
	
	cin >> n;
	
	is_exist[1].resize(26);
	is_exist[2].resize(26 * 26);
	is_exist[3].resize(26 * 26 * 26);
	is_exist[4].resize(26 * 26 * 26 * 26);
	is_exist[5].resize(26 * 26 * 26 * 26 * 26);
	for (int i = 1; i <= 5; i++) {
		for (int j = 0; j < is_exist[i].size(); j++) {
			is_exist[i][j] = false;
		}
	}
	
	for (int i = 0; i < n; i++) {
		string s;
		cin >> s;
		for (int j = 0; j < s.length(); j++) {
			string t;
			for (int k = j; k < min((int)s.length(), j + 5); k++) {
				t += s[k];
				is_exist[t.length()][encode(t)] = true;
			}
		}
	}
}

int main() {
	input();
	
	for (int i = 1; i <= 5; i++) {
		for (int j = 0; j < is_exist[i].size(); j++) {
			if (!is_exist[i][j]) {
				cout << decode(j, i) << endl;
				return 0;
			}
		}
	}
	
	return 0;
}