#include<stdio.h>
#include<string.h>
#include<vector>
#include<map>
#include<queue>
#include<iostream>
#define sz 3300

using namespace std;

map<string,int>mp;

map<int,string>mp1;

int par[sz];

bool color[sz];

vector<int>adj[sz];

int tag,flag;

string source,dest;

vector<int>vec;

void bfs(int s)
{
    memset(color,false,sizeof(color));

    queue<int>Q;

    color[s]=1;

    Q.push(s);

    int a;

    while (!Q.empty())
    {
        int u=Q.front();
        Q.pop();

        for (int i=0; i<adj[u].size(); i++)
        {
            a=adj[u][i];
            if(color[a]==0)
            {
                color[a]=1;
                Q.push(a);
                par[a]=u;
            }
        }
    }

    return ;
}

void path(int v)
{
    if (mp[source]==v)
    {
        vec.push_back(v);
        return;
    }
    else if (par[v]==0)
    {
        flag = 1;
        return;
    }
    else
    {
        path(par[v]);
        vec.push_back(v);
    }
    return ;
}

int main()
{
    int n,i,j,tc=0;
    string s,s1;
    while(scanf("%d",&n)!=EOF)
    {
        tag=0;

        mp.clear();
        mp1.clear();
        vec.clear();
        memset(par,0,sizeof(par));

        if(tc)
        {
            printf("\n");
        }

        for(i=1; i<=n; i++)
        {
            cin>>s>>s1;

            if(mp.find(s)==mp.end())
            {
                mp[s]=++tag;
                mp1[tag]=s;
            }

            if(mp.find(s1)==mp.end())
            {
                mp[s1]=++tag;
                mp1[tag]=s1;
            }

            adj[mp[s]].push_back(mp[s1]);

            adj[mp[s1]].push_back(mp[s]);
        }

        cin>>source>>dest;
        if(mp.find(source)==mp.end())
        {
            mp[source]=++tag;
            mp1[tag]=source;
        }

        if(mp.find(dest)==mp.end())
        {
            mp[dest]=++tag;
            mp1[tag]=dest;
        }


        bfs(mp[source]);

        flag=0;

        path(mp[dest]);


        if(flag)
        {
            printf("No route\n");

        }
        else
        {
            if(vec.size()==1)
            {
                cout<<mp1[vec[0]]<<" "<<mp1[vec[0]]<<"\n";
            }
            else
            {
                for(i=0; i<vec.size()-1; i++)
                {
                    cout<<mp1[vec[i]]<<" "<<mp1[vec[i+1]]<<"\n";
                }
            }
        }

        tc=1;

        for(i=0;i<=tag;i++)
        {
            adj[i].clear();
        }

    }
    return 0;
}
