#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
using namespace std;
#define N 3010
struct node
{
int to,nxt,w;
}edge[N<<2];
int k=0;
int head[N];
int n,m,q;
char s[11];
void add(int u,int v,int w)
{
edge[++k].to=v;
edge[k].w=w;
edge[k].nxt=head[u];
head[u]=k;
}
bool vis[N];
int dfs(int x,int p)
{
int ans2=99999;
for(int i=head[x];i;i=edge[i].nxt)
{
int v=edge[i].to;
int w=edge[i].w;
if(!vis[v])
{
if(v==p)
{
ans2=min(w,ans2);
}
else
{
vis[v]=true;
int f;
f=dfs(v,p);
vis[v]=false;
ans2=min(ans2,max(w,f));
}
}
}
return ans2;
}
int read()
{
int x=0;
int f=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
x=x*10+ch-'0';
ch=getchar();
}
return x*f;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
{
int x,y,w;
x=read();
y=read();
w=read();
add(x,y,w);
add(y,x,w);
}
cin>>q;
if(n>3100)
{
while(q--)
{
cout<<"Baozika"<<endl;
}
return 0;
}
while(q--)
{
memset(vis,false,sizeof(vis));
cin>>s;
if(s[0]=='g')
{
int s1,s2,t1,t2;
s1=read();
t1=read();
s2=read();
t2=read();
int wa1=dfs(s1,t1);
int wa2=dfs(s2,t2);
if(wa1==wa2)
{
cout<<"Baozika"<<endl;
}
else
{
cout<<"madoka"<<endl;
}
}
else
{
int x,y,w;
cin>>x>>y>>w;
add(x,y,w);
add(y,x,w);
}
}
}