#include <iostream>
#include <string>
#include <set>
#include <vector>

using namespace std;

struct gozare{
	char sym;
	int a, i;
	gozare()
	{
	}
	gozare(int i2, char s, int b)
	{
		i = i2;
		sym = s;
		a = b;
	}
};
int n, m;
set<int> Truth, Lie;
vector<gozare> dg;
int stoi(string s)
{
    int r = 0;
    for (int i = 0; i < s.length(); i++)
        r = r * 10 + (s[i] - '0');
    return r;
}
void DFS(vector<gozare> g, int m)
{
	if (m == 0)
	{
 	vector<int> Moj, Big;
 	set<int> MojF, BigF;
		set<int> T, L;
		for(vector<gozare>::iterator it = g.begin(); it != g.end(); it++)
		{
			L.insert((*it).i);
			if ((*it).sym == '+')
			{
				Big.push_back((*it).a);
				BigF.insert((*it).a);
            }
			else
			{
				Moj.push_back((*it).a);
			    MojF.insert((*it).a);
             }
		}
		bool b = false;
		for(vector<gozare>::iterator it = dg.begin(); it != dg.end(); it++)
		{
			if (L.find((*it).i) != L.end())
				continue;
			T.insert((*it).i);
			if ((*it).sym == '+')
			{
				Moj.push_back((*it).a);
				MojF.insert((*it).a);
			}
			else
			{
				Big.push_back((*it).a);
				BigF.insert((*it).a);
			}
		}
		for(vector<gozare>::iterator it = dg.begin(); it != dg.end(); it++)
		{
			if (L.find((*it).i) != L.end())
			{
                if ((*it).sym == '+')
                {
                    if (MojF.find((*it).a) != MojF.end())
                       b = true;
                }
                else
                {
                   if (BigF.find((*it).a) != BigF.end())
                      b = true;
                }
            }
		}
		if (Moj.size() > 1 || Moj.size() + Big.size() != n || b)
			return;
		for (set<int>::iterator it = T.begin(); it != T.end(); it++)
			Truth.insert((*it));
		for (set<int>::iterator it = L.begin(); it != L.end(); it++)
			Lie.insert((*it));
		return;
	}
	
	for (vector<gozare>::iterator it = g.begin(); it != g.end(); it++)
	{
		vector<gozare> gt = g;
		gt.erase(it - g.begin() + gt.begin());
		DFS(gt, m - 1);
	}
}
int main()
{
	cin >> n >> m;
	cin.ignore();
	for (int i = 0; i < n; i++)
	{
		string s;
		getline(cin, s);
		dg.push_back(gozare(i, s[0], stoi(s.substr(1)) - 1));
	}
	if (m == 0)
	{
		for (int i = 0; i < n; i++)
			cout << "Lie" << endl;
		return 0;
	}
	if (m == n)
	{
		for (int i = 0; i < n; i++)
			cout << "Truth" << endl;
		return 0;
	}
	DFS(dg, m);
	for (int i = 0; i < n; i++)
	{
		set<int>::iterator TP = Truth.find(i);
		set<int>::iterator LP = Lie.find(i);
		if (TP != Truth.end() && LP == Lie.end())
			cout << "Truth" << endl;
		else if (TP == Truth.end() && LP != Lie.end())
			cout << "Lie" << endl;
		else
			cout << "Not defined" << endl;
	}
}
