#include <bits/stdc++.h>
#pragma comment(linker, "/stack:64000000")
using namespace std;
template <typename first>
inline first abs(const first& a) {
  return a < 0 ? -a : a;
}
template <typename first>
inline first sqr(const first& a) {
  return a * a;
}
const int INF = int(1e9);
const long long INF64 = long long(1e18);
const long double EPS = 1e-9, PI = 3.1415926535897932384626433832795;
const int N = 100 * 1000 + 3;
int n, m;
int a[N], b[N];
inline bool read() {
  if (scanf("%d%d\n", &n, &m) != 2) return false;
  for (int i = 0; i < int(n); i++) {
    char tmp;
    assert(scanf("%c%d\n", &tmp, &b[i]) == 2);
    a[i] = tmp == '-' ? -1 : +1;
    b[i]--;
  }
  return true;
}
int z[N];
int negCnt[N], posCnt[N];
inline void solve() {
  int k = 0;
  for (int i = 0; i < int(n); i++) {
    (a[i] == -1 ? negCnt[b[i]] : posCnt[b[i]])++;
    k += a[i] == +1;
  }
  if (k > n - m)
    for (int i = 0; i < int(n); i++)
      if (posCnt[i] == 0) z[i] = +1;
  if (n - k > m)
    for (int i = 0; i < int(n); i++)
      if (negCnt[i] == 0) z[i] = +1;
  if (m == 0)
    for (int i = 0; i < int(n); i++)
      if (a[i] < 0)
        z[b[i]] = -1;
      else
        z[b[i]] = +1;
  if (m == n)
    for (int i = 0; i < int(n); i++)
      if (a[i] < 0)
        z[b[i]] = +1;
      else
        z[b[i]] = -1;
  bool found = false;
  for (int i = 0; i < int(n); i++) {
    if (negCnt[i] > n - m) assert(z[i] != -1), z[i] = +1;
    if (posCnt[i] > n - m)
      assert(z[i] != +1), z[i] = -1, assert(!found), found = true;
  }
  if (found)
    for (int i = 0; i < int(n); i++)
      if (z[i] != -1) z[i] = +1;
  for (int i = 0; i < int(n); i++)
    if (a[i] > 0) {
      if (z[b[i]] == -1)
        puts("Truth");
      else if (z[b[i]] == +1)
        puts("Lie");
      else
        puts("Not defined");
    } else {
      if (z[b[i]] == +1)
        puts("Truth");
      else if (z[b[i]] == -1)
        puts("Lie");
      else
        puts("Not defined");
    }
}
int main() {
  assert(read());
  solve();
  return 0;
}
