#include <bits/stdc++.h>
using namespace std;
#define int long long
#define faster ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define pb push_back
#define INF 99999999999
#define NMAX 200005
struct node{
bool tem[2];
map<char,int>next;
node(){
tem[0]=tem[1]=0;
next.clear();
}
};
vector<node>v;
int inicio;
int dp[NMAX];
int new_node(){
v.pb(node());
return v.size()-1;
}
bool solve(int x, int id){
if(v[x].tem[1]==0 && id==0)return true;
if(v[x].tem[0]==0 && id==1)return false;
if(dp[x]!=-1)return dp[x];
if(id==0){
dp[x]=false;
for(auto it:v[x].next){
if(solve(it.second,1-id)==true){
dp[x]=true;
}
}
}
else{
dp[x]=true;
for(auto it:v[x].next){
if(solve(it.second,1-id)==false){
dp[x]=false;
}
}
}
return dp[x];
}
int32_t main(){ faster
int n;
cin>>n;
string s;
int x;
inicio=new_node();
v[inicio].tem[0]=1;
v[inicio].tem[1]=1;
dp[0]=-1;
for(int i=0; i<n; i++){
cin>>s;
x=inicio;
for(auto it:s){
if(v[x].next.count(it)==0){
v[x].next[it]=new_node();
}
x=v[x].next[it];
dp[x]=-1;
v[x].tem[0]=1;
}
}
cin>>n;
for(int i=0; i<n; i++){
cin>>s;
x=inicio;
for(auto it:s){
if(v[x].next.count(it)==0){
v[x].next[it]=new_node();
}
x=v[x].next[it];
dp[x]=-1;
v[x].tem[1]=1;
}
}
cout<<(solve(0,0)==1?"Nina":"Emilija")<<"\n";
}
# | 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... |