#include <bits/stdc++.h>
using namespace std;
int N;
int M;
int lst[100100];
vector<int> b;
vector<string> v1;
vector<string> v2;
vector<pair<string,int>> v;
int has[200100];
map<int,int> adjlst[200100];
int cont = 0;
bool dfs(int i, int par){
bool lose = true;
//printf("s");
if( (has[i]&par) == 0 ) return !lose;
//printf("e");
for(pair<int,int> ii : adjlst[i]){
if( (has[ii.second]&par) > 0 ){
//printf("%d %d\n",ii.first,ii.second);
bool bol = dfs(ii.second, (3^par));
//printf("%d\n",bol);
lose &= bol;
}
}
return !lose;
}
int main(){
ios::sync_with_stdio(false);
cin >> N;
for(int i = 0; i < N; i++){
string s;
cin >> s;
v1.push_back(s);
v.push_back({s,2});
}
sort(v1.begin(),v1.end());
vector<int> tr = {};
for(int i = 0; i < N; i++){
tr.push_back(i);
}
cin >> M;
for(int i = 0; i < M; i++){
string s;
cin >> s;
v2.push_back(s);
v.push_back({s,1});
}
cont = 1;
has[0] = 0;
for(int i = 0; i < N + M; i++){
int in = 0;
for(int j = 0; j < v[i].first.size(); j++){
has[in] |= v[i].second;
if(adjlst[in].find(v[i].first[j] - 'a') == adjlst[in].end() ){
adjlst[in][v[i].first[j] - 'a'] = cont;
in = cont;
has[cont] = 0;
cont++;
}
else{
in = adjlst[in][v[i].first[j] - 'a'];
}
if(j == v[i].first.size() - 1){
has[in] |= v[i].second;
}
}
}
if(!dfs(0,2)){
printf("Emilija");
}
else{
printf("Nina");
}
}
# | 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... |