import java.io.*;

public class B {

	public B () throws IOException {
		String [] NM = r.readLine().split(" ");
		int N = Integer.parseInt(NM[0]);
		int M = Integer.parseInt(NM[1]);
		char [] S  = new char [N];
		int [] T = new int [N];
		for (int i = 0; i < N; ++i) {
			String t = r.readLine();
			S[i] = t.charAt(0);
			T[i] = Integer.parseInt(t.substring(1)) - 1;
		}
		solve(N, M, S, T);
	}
	
	public void solve (int N, int M, char [] S, int [] T) {
		start();
		
		int TC = 0, TE = 0;
		for (char c : S)
			if (c == '+')
				++TC;
			else
				++TE;
		
		int [] C = new int [N], E = new int [N];
		
		boolean [] CC = new boolean [N];
		
		for (int i = 0; i < N; ++i)
			if (S[i] == '+')
				++C[T[i]];
			else
				++E[T[i]];
		
		int NC = 0, cc = -1;
		for (int i = 0; i < N; ++i) {
			CC[i] = (C[i] + TE - E[i] == M);
			if (CC[i]) {
				++NC;
				cc = i;
			}
		}
		
		String TRU = "Truth", LIE = "Lie", ND = "Not defined";
		if (NC == 1) {
			for (int i = 0; i < N; ++i) {
				if (S[i] == '+' && T[i] == cc)
					print2(TRU);
				if (S[i] == '+' && T[i] != cc)				
					print2(LIE);
				if (S[i] == '-' && T[i] == cc)
					print2(LIE);
				if (S[i] == '-' && T[i] != cc)				
					print2(TRU);
			}
		}
		
		if (NC > 1) {
			for (int i = 0; i < N; ++i) {
				boolean can = CC[T[i]];
				if (S[i] == '+')
					print2(can ? ND : LIE);
				if (S[i] == '-')
					print2(can ? ND : TRU);
			}
		}
	}

	////////////////////////////////////////////////////////////////////////////////////

	static BufferedReader r;
	static long t;
	
	static void print2 (Object o) {
		System.out.println(o);
	}
	
	static void print (Object o) {
		print2(o);
		//print2((millis() - t) / 1000.0);
		System.exit(0);
	}
	
	static void run () throws IOException {
		r = new BufferedReader(new InputStreamReader(System.in));
		new B();
	}
	
	public static void main(String[] args) throws IOException {
		run();
	}
	
	static long millis() {
		return System.currentTimeMillis();
	}
	
	static void start() {
		t = millis();
	}
}
