#include <bits/stdc++.h>
using namespace std;
// quy uoc 0: Nina
//         1: Emilija
int n,m;
int trie[200009][26][2];
int nTrie=0;
bool xd[200009][2];
bool L[200009][2];
string tmp;
void addTrie(bool mask, string s) {
	int u = 0;
	for (int i = 0; i < s.size(); ++i) {
		if (!trie[u][s[i]-'a'][mask]) trie[u][s[i]-'a'][mask] = ++nTrie;
		u = trie[u][s[i]-'a'][mask];
	}
}
bool dequy(bool mask, int u1, int u2) {
	int u = mask ? u2 : u1;
	if (xd[u][mask]) return L[u][mask];
	xd[u][mask]=true; bool best=false;
	for (int i = 0; i < 26; ++i) {
		if (trie[u][i][mask]) {
			int u11 = trie[u1][i][0];
			int u22 = trie[u2][i][1];
			if ((!u11) || (!u22)) {
				best = true;
				break;
			}
			best = best || (!(dequy(!mask,u11,u22)));
		}
	}
	return (L[u][mask]=best);
}
int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL); cout.tie(NULL);
	cin >> n;
	for (int i = 1; i <= n; ++i) {
		cin >> tmp;
		addTrie(0,tmp);
	}
	cin >> m;
	for (int i = 1; i <= m; ++i) {
		cin >> tmp;
		addTrie(1,tmp);
	}
	if (dequy(0,0,0)) cout << "Nina";
	else cout << "Emilija";
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |