#include <bits/stdc++.h>
using namespace std;
int INF = 999999999;
double EPSILON = 0.00000001;
int accuse[100010], defend[100010];
bool can_be[100010];
int sint(string s) {
  int num = 0;
  istringstream myStream(s);
  (myStream >> num);
  return num;
}
string str(int num) {
  ostringstream oss;
  oss << num;
  return oss.str();
}
vector<string> split(string s) {
  vector<string> tokens;
  stringstream os(s);
  string temp;
  while (os >> temp) {
    tokens.push_back(temp);
  }
  return tokens;
}
int main() {
  memset(accuse, 0, sizeof(accuse));
  memset(defend, 0, sizeof(defend));
  memset(can_be, false, sizeof(can_be));
  int n, m;
  cin >> n >> m;
  int acc_sum = 0, def_sum = 0;
  vector<int> input;
  for (int i = 0; i < n; i++) {
    int z;
    scanf("%d", &z);
    input.push_back(z);
    if (z > 0) {
      accuse[z - 1]++;
      acc_sum++;
    } else {
      z = fabs(z) - 1;
      defend[z]++;
      def_sum++;
    }
  }
  int total = 0;
  for (int i = 0; i < n; i++) {
    int truths = accuse[i];
    truths += def_sum - defend[i];
    if (truths == m) {
      can_be[i] = true;
      total++;
    }
  }
  for (vector<int>::iterator it = input.begin(); it != input.end(); it++) {
    if (*it > 0) {
      if (can_be[*it - 1] and total == 1)
        printf("Truth\n");
      else if (can_be[*it - 1])
        printf("Not defined\n");
      else
        printf("Lie\n");
    } else {
      int k = fabs(*it) - 1;
      if (not can_be[k])
        printf("Truth\n");
      else if (can_be[k] and total == 1)
        printf("Lie\n");
      else
        printf("Not defined\n");
    }
  }
  return 0;
}
