rt
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int inf=192608170000000,maxn=10005;
int n,m,s,t;
struct node
{
int v,w,nxt,c;
}e[2000005];
int tot=1;
int head[2000005];
int add(int u,int v,int w,int c)
{
e[++tot]=(node){v,w,head[u],c},head[u]=tot;
e[++tot]=(node){u,0,head[v],-c},head[v]=tot;
}
deque<int> q;
int dis[maxn],bk[maxn],pre[maxn],zz;
inline int spfa()
{
while(!q.empty())
q.pop_front();
memset(pre,0,sizeof pre);
memset(bk,0,sizeof bk);
memset(dis,0x7f,sizeof dis);
q.push_front(1);
// for(int i=1;i<=n;i++)
// cout<<dis[i]<<endl;
dis[1]=0;
bk[1]=1;
while(!q.empty())
{
register int x=q.front();
bk[x]=0;
q.pop_front();
for(register int i=head[x];i;i=e[i].nxt)
{
register int v=e[i].v;
// cout<<v<<endl;
// cout<<v<<' '<<e[i].w<<' '<<dis[x]<<' '<<bk[v]<<' '<<dis[v]<<endl;
if(e[i].w>0&&dis[v]>dis[x]+e[i].c )
{
// cout<<"QWQ"<<endl;
dis[v]=dis[x]+e[i].c;
if(!bk[v])
{
if(!q.empty())
{
if(dis[q.front()]>dis[v])
q.push_front(v);
else
q.push_back(v);
}
else
q.push_front(v);
// q.push(v);
}
pre[v]=i;
bk[v]=1;
}
}
}
// cout<<dis[n]<<endl;
return dis[t]<=1926081719260817;
}
int cnt1,a1[maxn],tp[maxn],a2[maxn],qwq[maxn<<3];
queue<int> s1;
stack<int> s2;
string qaq[maxn<<3];
void dfs(int x)
{
bk[x]=1;
if(qwq[x])
cout<<qaq[qwq[x]]<<endl;
for(int i=head[x];i;i=e[i].nxt)
{
int v=e[i].v;
if(!bk[v]&&!e[i].w)
dfs(v);
}
}
void dfs2(int x)
{
bk[x]=1;
for(int i=head[x];i;i=e[i].nxt)
{
int v=e[i].v;
if(!e[i].w&&!bk[v])
dfs2(v);
}
if(qwq[x]&&qwq[x]!=n)
cout<<qaq[qwq[x]]<<endl;
}
map<string,int> mp;
signed main(){
tot=1;
cin>>n>>m;
s=2*n+1;
t=2*n;
for(int i=1;i<=n;i++)
{
string a;
cin>>a;
qaq[i]=a;
a1[i]=++cnt1;
a2[i]=++cnt1;
qwq[a1[i]]=i;
mp[a]=i;
add(a2[i],a1[i],1,0);
}
add(s,a1[1],2,0);
for(int i=1;i<=m;i++)
{
string a,b;
cin>>a>>b;
int x=mp[a],y=mp[b];
if(x>y)
swap(x,y);
add(a1[x],a2[y],1,-1);
// cout<<x<<' '<<y<<endl;
}
int ans=0,s=0;
while(spfa())
{
// ++zz;
// cout<<"QWQ"<<endl;
register int mi=1926081719260817,x=t;
// cout<<pre[1]<<endl;
while(x!=1)
{
mi=min(e[pre[x]].w,mi);
x=e[pre[x]^1].v;
}
x=t;
while(x!=1)
{
int v=pre[x];
e[pre[x]].w-=mi;
e[pre[x]^1].w+=mi;
ans+=e[pre[x]].c*mi;
// cout<<e[v].w<<endl;
// cout<<x<<endl;
x=e[pre[x]^1].v;
}
// cout<<mi<<endl;
s+=mi;
}
if(s!=2)
{
cout<<"No Solution!";
return 0;
}
cout<<-ans<<endl;
dfs(1);
dfs2(1);
return 0;
}