#include "bits/stdc++.h"
using namespace std;
typedef long long ll;
typedef pair<ll, ll> pii;
#define F first
#define S second
#define FIO ios_base::sync_with_stdio(false); cin.tie(0)
#define sz(x) ((int)((x).size()))
#define all(x) x.begin(), x.end()
#define pb push_back
#define uid(a, b) uniform_int_distribution<int>(a, b)(rng)
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
const int N = 1e3 + 10;
int n, m;
map<int, bool> imp;
int qu[N][2];
char c[N];
map<int, int> comp;
int back[N];
map<pii, int> bl;
vector<int> adj[N];
bool vis[N];
void dfs(int node) {
vis[node] = 1;
for (int x : adj[node]) {
if (vis[x] or bl[make_pair(node, x)]) continue;
dfs(x);
}
}
int main() {
FIO;
cin >> n >> m;
set<int> f;
set<int> s;
for (int i = 0; i < m; i++) {
cin >> c[i] >> qu[i][0] >> qu[i][1];
if (qu[i][0] <= n) f.insert(qu[i][0]);
else s.insert(qu[i][0]);
if (qu[i][1] <= n) f.insert(qu[i][1]);
else s.insert(qu[i][1]);
}
int cur = 1;
for (int x : f) {
back[cur] = x;
comp[x] = cur++;
}
for (int x : s) {
back[cur] = x;
comp[x] = cur++;
}
for (int i = 0; i < m; i++) {
qu[i][0] = comp[qu[i][0]];
qu[i][1] = comp[qu[i][1]];
}
int last = -1;
for (int x : f) {
if (last != -1) {
adj[last].pb(comp[x]);
}
last = comp[x];
}
last = -1;
for (int x : s) {
if (last != -1) {
adj[comp[x]].pb(last);
}
last = comp[x];
}
last = -1;
for (int i = 0; i < m; i++) {
if (c[i] == 'Q') {
memset(vis, 0, sizeof vis);
dfs(qu[i][0]);
cout << (vis[qu[i][1]] ? "DA" : "NE") << endl;
} else if (c[i] == 'A') {
adj[qu[i][0]].pb(qu[i][1]);
adj[qu[i][1]].pb(qu[i][0]);
} else {
bl[make_pair(qu[i][0], qu[i][1])] = 1;
bl[make_pair(qu[i][1], qu[i][0])] = 1;
}
}
return 0;
}