#include <bits/stdc++.h>
using namespace std;
enum validity { T, L, U };
struct solution {
  bool* b;
  bool* didit;
  bool* etl3b;
  bool suspect = false;
  int trues = 0;
};
void backtrack(solution x, vector<solution>& solutions, int n, int m, int k,
               int* arr);
bool b(solution& x, int k, int val, int n, int m, int* arr);
int main() {
  int n, m;
  cin >> n >> m;
  int* arr;
  arr = new int[n + 1];
  for (int i = 1; i < n + 1; i++) cin >> arr[i];
  solution x;
  x.b = new bool[n + 1];
  x.didit = new bool[n + 1];
  x.etl3b = new bool[n + 1];
  for (int i = 1; i <= n; i++) x.etl3b[i] = false;
  vector<solution> solutions;
  backtrack(x, solutions, n, m, 1, arr);
  int* lastsolution;
  lastsolution = new int[n + 1];
  for (int i = 1; i <= n; i++) lastsolution[i] = 0;
  for (int i = 1; i <= n; i++)
    for (int j = 0; j < solutions.size(); j++)
      lastsolution[i] += solutions[j].b[i];
  for (int i = 1; i <= n; i++)
    if (lastsolution[i] == n)
      cout << "Truth" << endl;
    else if (lastsolution[i] == 0)
      cout << "Lie" << endl;
    else
      cout << "Not defined" << endl;
}
void backtrack(solution x, vector<solution>& solutions, int n, int m, int k,
               int* arr) {
  solution y;
  y = x;
  x.b = new bool[n + 1];
  x.didit = new bool[n + 1];
  x.etl3b = new bool[n + 1];
  for (int i = 1; i <= n; i++) {
    x.b[i] = y.b[i];
    x.didit[i] = y.didit[i];
    x.etl3b[i] = y.etl3b[i];
  }
  bool oldvaletl3b = x.etl3b[abs(arr[k])];
  bool oldvalsuspect = x.suspect;
  for (int i = 0; i < 2; i++) {
    x.etl3b[abs(arr[k])] = oldvaletl3b;
    x.suspect = oldvalsuspect;
    if (b(x, k, i, n, m, arr)) {
      x.b[k] = i;
      x.didit[abs(arr[k])] =
          (arr[k] > 0 && i || arr[k] < 0 && !i) ? true : false;
      oldvalsuspect = x.suspect;
      x.suspect = (arr[k] > 0 && i || arr[k] < 0 && !i) ? true : oldvalsuspect;
      oldvaletl3b = x.etl3b[abs(arr[k])];
      x.etl3b[abs(arr[k])] = true;
      if (i) x.trues++;
      if (k == n)
        solutions.push_back(x);
      else
        backtrack(x, solutions, n, m, k + 1, arr);
    }
  }
}
bool b(solution& x, int k, int val, int n, int m, int* arr) {
  if (val && x.trues == m) return false;
  if (!val && m - x.trues > n - k) return false;
  if (x.etl3b[abs(arr[k])] && val)
    return arr[k] > 0 && x.didit[abs(arr[k])] ||
           arr[k] < 0 && !x.didit[abs(arr[k])];
  if (x.etl3b[abs(arr[k])] && !val)
    return arr[k] < 0 && x.didit[abs(arr[k])] ||
           arr[k] > 0 && !x.didit[abs(arr[k])];
  if (!x.etl3b[abs(arr[k])] && val)
    if (arr[k] > 0 && x.suspect) return false;
  if (!x.etl3b[abs(arr[k])] && !val)
    if (arr[k] < 0 && x.suspect) return false;
  return true;
}
