#include <bits/stdc++.h>
using namespace std;
#define int long long
#define PII pair<int,int>
#define endl '\n'
#define INF 2e18
#define ull unsigned long long
#define pq priority_queue<int>
int mod = 1000000007;
const int N = 2e6 + 5;
int dx[] = { 0,0,1,-1 };
int dy[] = { 1,-1,0,0 };
int days[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
//快速幂
inline int ksm(int a, int b)
{
int mod = 1000000007;
int ans = 1;
a %= mod;
while (b)
{
if (b & 1)ans = (ans * a) % mod;
b >>= 1;
a = (a * a) % mod;
}
return ans % mod;
}
int flag;
map<string, int>Id;
map<int, string>name;
struct node
{
int id;
node* next;
node* front;
};
map<string, node*>mp;
void solve()
{
int n, m; cin >> n >> m;
node* head = new node;
head->front = NULL;
head->next = NULL;
head->id = 0;
node* tail = new node;
tail->id = n + 1;
tail->next = NULL;
tail->front = head;
head->next = tail;
for (int i = 1; i <= n; i++)
{
string s; cin >> s;
Id[s] = ++flag;
name[flag] = s;
node* New = new node;
New->id = flag;
node* t = tail->front;
t->next = New;
New->front = t;
New->next = tail;
tail->front = New;
mp[s] = New;
}
while (m--)
{
string x, y; cin >> x >> y;
int a = Id[x], b = Id[y];
node* aa = mp[x];
node* bb = mp[y];
aa->front->next = aa->next;
aa->next->front = aa->front;
aa->next = bb;
aa->front = bb->front;
bb->front->next = aa;
bb->front = aa;
}
node* t = head;
t = t->next;
while (t != tail)
{
cout << name[t->id] << ' ';
t = t->next;
}
}
signed main()
{
ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
int t = 1;
//cin >> t;
while (t--)
{
solve();
}
return 0;
}