#include
#include
#include
using namespace std;
const int maxn = 1e5 + 10;
const int INF = 1e9;
int root[maxn];
int sz[maxn];
int find_root(int x) {
while(root[x] != x) {
root[x] = root[root[x]];
x = root[x];
}
return x;
}
bool check(int A, int B) {
int root_A = find_root(A);
int root_B = find_root(B);
return root_A == root_B;
}
void unite(int A, int B) {
int root_A = find_root(A);
int root_B = find_root(B);
if(root_A != root_B) {
if(sz[root_A] > sz[root_B]) {
root[root_B] = root[root_A];
sz[root_A] += sz[root_B];
}
else {
root[root_A] = root[root_B];
sz[root_B] += sz[root_A];
}
}
}
int main() {
for(int i = 0; i < maxn; i++) {
root[i] = i;
sz[i] = 1;
}
while(true) {
string s;
cin >> s;
if(s == "union") {
int a, b;
cin >> a >> b;
unite(a, b);
}
else {
int a, b;
cin >> a >> b;
if(check(a, b)) {
cout << "YES" << endl;
}
else {
cout << "NO" << endl;
}
}
}
return 0;
}