class V(object):
	def __init__(self, address):
		self.address = address # adres tego kompa
		self.h = [] # lista sasiadow
		self.status = 0 # do BFSa

	def add_h(self, h): # dodaje obiekt wierzcholka do siasiadow
		if h not in self.h:
			self.h.append(h)

	def set_status(self, s): # zmienia status tego wierzcholka
		self.status = s

	def check_h(self, looking_for): # sprawdza swoich sasiadow pod katem pasujacego adresu
		self.status = 1
		for v in self.h:
			if v.status == 0:
				if v.address == looking_for:
					return True
				if v.check_h(looking_for) == True:
					return True
		return False

class Graph(object):
	def __init__(self):
		self.v = []

	def add(self, v): # dodaje obiekt wierzcholka do wierzcholkow grafu
		if v not in self.v:
			self.v.append(v)

	def get(self, v): # zwraca wierzcholek o podanym adresie
		for i in self.v:
			if i.address == v:
				return i

	def add_connection(self, u, v): # dla podanych adresow tworzy polaczenie
		if not self.get(u):
			self.add(V(u))

		if not self.get(v):
			self.add(V(v))

		uu = self.get(u)
		vv = self.get(v)

		uu.add_h(vv)
		vv.add_h(uu)

	def test(self, u, v): # sprawdza czy istnieje polaczenie miedzy danymi adresami
		for i in self.v:
			i.set_status(0)
		if self.get(u):
			return self.get(u).check_h(v)
		return False

ins = [
'B 100.100.100.1 100.100.100.2',
'B 100.100.100.1 100.100.100.3',
'B 100.100.100.10 100.100.100.11',
'T 100.100.100.1 100.100.100.3',
'T 100.100.100.10 100.100.100.2',
'T 100.100.100.10 100.100.100.11',
'B 100.100.100.11 100.100.100.2',
'T 100.100.100.10 100.100.100.3',
'T 100.100.100.100 100.100.100.103'
]
g = Graph()

for line in ins:
	line = line.strip().split()
	if line[0] == 'T':
		print 'T' if g.test(line[1], line[2]) else 'N'
	else:
		g.add_connection(line[1], line[2])

