#include <bits/stdc++.h>
using namespace std;
template <class T>
inline T checkmin(T &a, T b) {
  return (a < b) ? a : a = b;
}
template <class T>
inline T checkmax(T &a, T b) {
  return (a > b) ? a : a = b;
}
template <class T>
T GCD(T a, T b) {
  if (a < 0) return GCD(-a, b);
  if (b < 0) return GCD(a, -b);
  return (a == 0) ? b : GCD(b % a, a);
}
template <class T>
T LCM(T a, T b) {
  if (a < 0) return LCM(-a, b);
  if (b < 0) return LCM(a, -b);
  return (a == 0 || b == 0) ? 0 : a / GCD(a, b) * b;
}
template <class T>
T ExtGCD(T a, T b, T &x, T &y) {
  if (a < 0) {
    T c = ExtGCD(-a, b, x, y);
    x = -x;
    return c;
  }
  if (b < 0) {
    T c = ExtGCD(a, -b, x, y);
    y = -y;
    return c;
  }
  if (a == 0) {
    x = 0, y = 1;
    return b;
  } else {
    T c = ExtGCD(b % a, a, y, x);
    x -= b / a * y;
    return c;
  }
}
template <class T>
inline T sqr(T X) {
  return X * X;
}
namespace Poor {
const int MaxiN = 100005;
int N, M, TotAgainst, Suspect;
int Say[MaxiN], For[MaxiN], Against[MaxiN];
bool May(int i) { return (For[i] + TotAgainst - Against[i] == M); }
bool MayNot(int i) {
  return (For[i] + TotAgainst - Against[i] != M || Suspect > 1);
}
void Run() {
  scanf("%d%d", &N, &M);
  for (int i = 1; i <= N; ++i) {
    scanf("%d", Say + i);
    if (Say[i] > 0)
      ++For[Say[i]];
    else {
      ++Against[-Say[i]];
      ++TotAgainst;
    }
  }
  Suspect = 0;
  for (int i = 1; i <= N; ++i)
    if (May(i)) ++Suspect;
  for (int i = 1; i <= N; ++i) {
    if (May(abs(Say[i])) && MayNot(abs(Say[i])))
      puts("Not defined");
    else {
      if (Say[i] > 0) {
        if (May(abs(Say[i])))
          puts("Truth");
        else
          puts("Lie");
      } else {
        if (MayNot(abs(Say[i])))
          puts("Truth");
        else
          puts("Lie");
      }
    }
  }
}
}  // namespace Poor
int main() {
  Poor::Run();
  return 0;
}
