#include<bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define ld long double
#define gcd(a,b) __gcd(a,b)
using namespace std;
const int INF=INT_MAX;
int n,m,g;
map<int,int> region[1005];
struct Node{
int r;
int cnt;
map<int,int> vis;
int index;
};
Node node[1005];
int vis[1005]={0};
void insert1(int na){
if(na==0){
for(int i=1;i<=n;++i)
vis[i]++;
}
else{
for(int i=1;i<=n;++i)
if(node[i].r==na)
vis[i]++;
}
}
void insert2(int pa){
if(pa==0){
for(int i=1;i<=n;++i)
vis[i]++;
}
else{
for(int i=1;i<=n;++i)
if(region[node[i].r][pa]==1)
vis[i]++;
}
}
void insert3(int paa){
if(paa==0){
for(int i=1;i<=n;++i)
vis[i]++;
}
else{
for(int i=1;i<=n;++i)
if(node[i].vis.find(paa)==node[i].vis.end())
vis[i]++;
}
}
int maxNode(vector<Node> tnode){
int ans=tnode[0].index;
for(int i=1;i<tnode.size();++i){
if(tnode[i].cnt<node[ans].cnt)
ans=tnode[i].index;
else if(tnode[i].cnt==node[ans].cnt && tnode[i].index<node[ans].index)
ans=tnode[i].index;
}
return ans;
}
void insertNode(int a,int index){
node[index].vis[a]=1;
node[index].cnt++;
region[node[index].r][a]=1;
cout<<index<<' ';
}
void insert(int a,int na,int pa,int paa,int paar){
memset(vis,0,sizeof(vis));
insert1(na);
insert2(pa);
insert3(paa);
vector<Node> tempans;
for(int i=1;i<=n;++i){
if(vis[i]==3)
tempans.push_back(node[i]);
}
if(tempans.size()!=0){
int index=maxNode(tempans);
insertNode(a,index);
return ;
}
if(paa!=0 && paar==0){
memset(vis,0,sizeof(vis));
insert1(na);
insert2(pa);
for(int i=1;i<=n;++i){
if(vis[i]==2)
tempans.push_back(node[i]);
}
}
if(tempans.size()!=0){
int index=maxNode(tempans);
insertNode(a,index);
return ;
}
cout<<0<<' ';
}
void solve(){
cin>>n>>m;
for(int i=1;i<=n;++i){
int a;
cin>>a;
node[i].r=a;
node[i].index=i;
}
cin>>g;
for(int i=0;i<g;++i){
int f,a,na,pa,paa,paar;
cin>>f>>a>>na>>pa>>paa>>paar;
while(f--){
insert(a,na,pa,paa,paar);
}
cout<<endl;
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
solve();
return 0;
}