#include <stdio.h>
#include <iostream>
#include <cstring>
#include <algorithm>
typedef long long ll;
const int maxh = 13;
const int maxn = 5000;
int n,m;
using namespace std;
int head[maxn],nex[maxn<<1],dis[maxn<<1],q;
ll w[maxn<<1];
int dep[maxn];
struct edge {
int a,b;ll w;
} edges[maxn];
int fa[maxn][14];
ll maxx[maxn][14];
bool operator<(const edge &ed1,const edge &ed2) {
return ed1.w<ed2.w;
}
void connect(int x,int y,ll z) {
nex[++q]=head[x],head[x] = q,dis[q] = y;w[q] = z;
nex[++q]=head[y],head[y] = q,dis[q] = x;w[q] = z;
}
void printAns(ll a,ll b) {
if(a!=b) {
cout<<"madoka"<<endl;
} else {
cout<<"Baozika"<<endl;
}
}
int father[maxn];
int find(int a) {
if(father[a]==a) {
return a;
} else {
return find(father[a]);
}
}
void merge(int a,int b) {
int ffa = find(a),ffb = find(b);
father[ffa] = ffb;
}
void dfs(int a) {
//cout<<a;
for(int i = head[a]; i; i=nex[i]) {
int to = dis[i];
if(to!=fa[a][0]) {
dep[to] = dep[a]+1;
fa[to][0] = a;
maxx[to][0] = w[i];
dfs(to);
}
}
}
edge edgeq[6500];
long long rr;
void init(int update) {
if(update) {
q = 0;
memset(nex,0,sizeof(nex));
memset(dis,0,sizeof(dis));
memset(head,0,sizeof(head));
sort(edgeq+1,edgeq+1+rr);
for(int i= 1; i<=n; i++)father[i] = i;
int need = n-1;
for(int i = 1; i<=rr&&need; i++) {
if(find(edgeq[i].a)!=find(edgeq[i].b)) {
connect(edgeq[i].a,edgeq[i].b,edgeq[i].w);
need--;
merge(edgeq[i].a,edgeq[i].b);
}
}
}
for(int i = 1;i<=n;i++){
for(int j = 0;j<14;j++){
maxx[i][j] = 0;
}
}
memset(fa,0,sizeof(father));
dep[1] = 1;
fa[1][0] = 1;
dfs(1);
for(int h = 1; h<=maxh; h++) {
for(int i = 1; i<=n; i++) {
fa[i][h] = fa[fa[i][h-1]][h-1];
maxx[i][h] = max(maxx[i][h-1],maxx[fa[i][h-1]][h-1]);
}
}
}
ll ans(int a,int b) {
ll ret = 0;
if(dep[a]<dep[b]) {
swap(a,b);
}
for(int i = maxh; i>=0; i--) {
if(dep[fa[a][i]]>=dep[b]) {
ret = max(ret,maxx[a][i]);
a = fa[a][i];
}
}
if(a!=b) {
for(int i = maxh; i>=0; i--) {
if(fa[a][i]!=fa[b][i]) {
ret = max(ret,maxx[a][i]);
ret = max(ret,maxx[b][i]);
a = fa[a][i];
b = fa[b][i];
}
}
ret = max(ret,maxx[a][0]);
ret = max(ret,maxx[b][0]);
} else {
return ret;
}
}
void addLine(int a,int b,ll z) {
edgeq[++rr].a = a,edgeq[rr].b = b,edgeq[rr].w = z;
}
int main() {
// freopen("game.in","r",stdin);
// freopen("game.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i = 1; i<=m; i++) {
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
edges[i].a =x,edges[i].b=y,edges[i].w=z;
}
sort(edges+1,edges+1+m);
//zui xiao sheng cheng shu
for(int i= 1; i<=n; i++)father[i] = i;
int need = n-1;
for(int i = 1; i<=m&&need; i++) {
if(find(edges[i].a)!=find(edges[i].b)) {
connect(edges[i].a,edges[i].b,edges[i].w);
edgeq[++rr] = edges[i];
need--;
merge(edges[i].a,edges[i].b);
}
}
init(0);
int tt;
scanf("%d",&tt);
int updated = 1;
for(int i = 1; i<=tt; i++) {
char str[10];
cin>>str;
if(str[0]=='g') {
int x,y,z,w;
if(!updated) init(1);
updated = 1;
scanf("%d%d%d%d",&x,&y,&z,&w);
printAns(ans(x,y),ans(z,w));
} else {
updated = 0;
ll x,y,z;
scanf("%lld%lld%lld",&x,&y,&z);
addLine(x,y,z);
}
}
return 0;
}