#include<iostream>
#include<cmath>
using namespace std;
const int N=2e5+10;
struct node{
int l,r,fa[600];
}bl[500];
int find(int x,int num){
if(bl[num].fa[x]==x) return x;
else return bl[num].fa[x]=find(bl[num].fa[x],num);
}
void connect(int x,int y,int num){
bl[num].fa[find(x,num)]=find(y,num);
}
int len,cnt;
int n,q;
int a[N],blo[N];
void build(){
len=sqrt(n);
for(int i=1;i<=n;i+=len){
cnt++;
bl[cnt].l=i;
bl[cnt].r=min(i+len-1,n);
for(int j=bl[cnt].l;j<=bl[cnt].r;j++){
blo[j]=cnt;
}
for(int j=1;j<=bl[cnt].r-bl[cnt].l+101;j++){
bl[cnt].fa[j]=j;
}
for(int j=1;j<=bl[cnt].r-bl[cnt].l+1;j++){
connect(j,a[j+bl[cnt].l-1]+bl[cnt].r-bl[cnt].l+1,cnt);
}
}
}
int tmp[505];
void upd(int x,int y,int v1,int v2){
int ql=blo[x],qr=blo[y];
if(x==y){
for(int i=1;i<=bl[ql].r-bl[ql].l+1;i++){
tmp[i]=find(i,ql);
}
for(int i=x-bl[ql].l+1;i<=y-bl[ql].l+1;i++){
if(tmp[i]==v1+bl[ql].r-bl[ql].l+1) tmp[i]=v2+bl[ql].r-bl[ql].l+1;
}
for(int i=1;i<=bl[ql].r-bl[ql].l+101;i++){
bl[ql].fa[i]=i;
}
for(int i=1;i<=bl[ql].r-bl[ql].l+1;i++){
connect(i,tmp[i],ql);
}
return;
}
for(int i=ql+1;i<qr;i++){
if(v1+bl[i].r-bl[i].l+1!=find(v1+bl[i].r-bl[i].l+1,i)) continue;
if(v2+bl[i].r-bl[i].l+1==find(v2+bl[i].r-bl[i].l+1,i)){
connect(v1+bl[i].r-bl[i].l+1,v2+bl[i].r-bl[i].l+1,i);
}else{
bl[i].fa[v1+bl[i].r-bl[i].l+1]=v2+bl[i].r-bl[i].l+1;
bl[i].fa[v2+bl[i].r-bl[i].l+1]=v2+bl[i].r-bl[i].l+1;
}
}
for(int i=1;i<=bl[ql].r-bl[ql].l+1;i++){
tmp[i]=find(i,ql);
}
for(int i=x-bl[ql].l+1;i<=bl[ql].r-bl[ql].l+1;i++){
if(tmp[i]==v1+bl[ql].r-bl[ql].l+1) tmp[i]=v2+bl[ql].r-bl[ql].l+1;
}
for(int i=1;i<=bl[ql].r-bl[ql].l+101;i++){
bl[ql].fa[i]=i;
}
for(int i=1;i<=bl[ql].r-bl[ql].l+1;i++){
connect(i,tmp[i],ql);
}
for(int i=1;i<=bl[qr].r-bl[qr].l+1;i++){
tmp[i]=find(i,qr);
}
for(int i=1;i<=y-bl[qr].l+1;i++){
if(tmp[i]==v1+bl[qr].r-bl[qr].l+1) tmp[i]=v2+bl[qr].r-bl[qr].l+1;
}
for(int i=1;i<=bl[qr].r-bl[qr].l+101;i++){
bl[qr].fa[i]=i;
}
for(int i=1;i<=bl[qr].r-bl[qr].l+1;i++){
connect(i,tmp[i],qr);
}
}
int main(){
ios::sync_with_stdio(false);
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
build();
cin>>q;
while(q--){
int ll,rr,xx,yy;
cin>>ll>>rr>>xx>>yy;
upd(ll,rr,xx,yy);
}
for(int i=1;i<=cnt;i++){
for(int j=1;j<=bl[i].r-bl[i].l+1;j++){
cout<<find(j,i)-(bl[i].r-bl[i].l+1)<<" ";
}
}
return 0;
}