#pragma GCC optimize("Ofast")
#pragma GCC target("sse2")
#include <bits/stdc++.h>
#define ls(x) (x << 1)
#define rs(x) (x << 1 | 1)
#define mid (l + r >> 1)
using namespace std;
const int U = 100, N = 200000;
int tr[(N << 2) + 5][U + 5];
int n, a, b, x, y;
int w[N + 5];
void Build(int p, int l, int r)
{
for (int i = 1; i <= U; i++) tr[p][i] = i;
if (l == r) return;
Build(ls(p), l, mid), Build(rs(p), mid + 1, r);
}
void Psd(int p, int l, int r)
{
if (l == r) return;
for (int i = 1; i <= U; i++)
tr[ls(p)][i] = tr[p][tr[ls(p)][i]],
tr[rs(p)][i] = tr[p][tr[rs(p)][i]];
for (int i = 1; i <= U; i++) tr[p][i] = i;
}
void Modify(int p, int l, int r)
{
if (l >= a && r <= b)
{
for (int i = 1; i <= U; i++) if (tr[p][i] == x) tr[p][i] = y;
return;
}
Psd(p, l, r);
if (a <= mid) Modify(ls(p), l, mid);
if (b > mid) Modify(rs(p), mid + 1, r);
}
void Print(int p, int l, int r)
{
if (l == r) return (void)printf("%d ", tr[p][w[l]]);
Psd(p, l, r), Print(ls(p), l, mid), Print(rs(p), mid + 1, r);
}
int main()
{
scanf("%d", &n);
for (int i = 1; i <= n; i++) scanf("%d", &w[i]);
Build(1, 1, n);
int q;
for (scanf("%d", &q); q--;) scanf("%d%d%d%d", &a, &b, &x, &y), Modify(1, 1, n);
return Print(1, 1, n), 0;
}