#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);
		}
	}
    
	
}