#include <bits/stdc++.h>

using namespace std;

#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;

#define ordered_set tree<long long, null_type,less<long long>, rb_tree_tag,tree_order_statistics_node_update>

template <typename T>
void resize(int n, vector<T> &u) {
  u.resize(n);
}

template <typename Head, typename... Tail>
void resize(int n, Head &H, Tail&... T) {
  resize(n, H);
  resize(n, T...);
}

template <typename T, typename Head>
void to_dimension(T m, Head &u, int n) {
  u.resize(n, m);
}

template <typename T>
void set_dimension(T &u, int n) {
  u.resize(n);
}

template <typename T, typename Head, typename... Tail>
void to_dimension(T m, Head &u, int n, Tail... F) {
  u.resize(n);
  for(auto &i : u) {
    to_dimension(m, i, F...);
  }
}

template <typename Head, typename... Tail>
void set_dimension(Head &u, int n, Tail... F) {
  u.resize(n);
  for(auto &i : u) {
    set_dimension(i, F...);
  }
}

template <typename T>
void unique(vector<T> &u) {
  sort(u.begin(), u.end());
  u.resize(unique(u.begin(), u.end()) - u.begin());
}

template <typename T>
void debug_out(T t) {
  cerr << t;
}

template <typename A, typename B>
void debug_out(pair<A, B> u) {
  cerr << "(" << u.first << " " << u.second << ")";
}

template <typename T>
void debug_out(vector<T> t) {
  int sz = t.size();
  for(int i = 0; i < sz; i++) {
    debug_out(t[i]);
    if(i != sz - 1) cerr << ", ";
  }
}

template <typename T>
void debug_out(vector<vector<T>> t) {
  int sz = t.size();
  for(int i = 0; i < sz; i++) {
    debug_out(t[i]);
    if(i != sz - 1) cerr << endl;
  }
}

template<typename T>
T maxest(T a, T b) {
  return (a > b ? a : b);
}

template<typename T, typename... Tail>
T maxest(T a, T b, Tail... c) {
  return maxest(maxest(a, b), c...);
}

template<typename T>
T minest(T a, T b) {
  return (a < b ? a : b);
}

template<typename T, typename... Tail>
T minest(T a, T b, Tail... c) {
  return minest(minest(a, b), c...);
}

vector<char> lowchar = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
vector<char> hichar = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
vector<char> base_10 = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
vector<int> dx = {0, 0, 1, -1}, dy = {1, -1, 0, 0};

template <typename T>
string to_string(T t) {
  ostringstream ss;
  ss << t;
  return ss.str();
}

long long to_num(string t) {
  long long res = 0;
  for(int i = 0; i < (int) t.length(); i++) {
    res *= 10;
    res += t[i] - '0';
  }
  return res;
}

string to_base(long long n, int base) {
  string res;
  while(n) {
    res += to_string(n % base);
    n /= base;
  }
  reverse(res.begin(), res.end());
  return res;
}

inline int next_bit_perm(int v) {
  int t = v | (v - 1);
  return (t + 1) | (((~t & -~t) - 1) >> (__builtin_ctz(v) + 1));
}

#define debug(...) cerr << "[" << #__VA_ARGS__ << "]:" << endl, debug_out(__VA_ARGS__), cerr << endl;
#define range(i, m, n) for(int i = m; i < n; i++)
#define husk(i, m, n) for(int i = m; i > n; i--)
#define sub_mask(i, mask) for(int i = mask; ~i; i = (i == 0 ? -1 : (i - 1) & mask))
#define card_mask(i, n) for(int k = 1; k <= n; k++) for(int i = (1 << k) - 1; i < (1 << n); i = next_bit_perm(i))

int n, m;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> m;
  vector<int> pos(n);
  vector<int> neg(n);
  int total = 0;
  vector<int> crime(n);
  vector<int> acc;
  range(i, 0, n) {
    string s;
    cin >> s;
    if(s[0] == '+') {
      pos[s[1] - '1']++;
      acc.push_back(s[1] - '1');
    } else {
      neg[s[1] - '1']++;
      total++;
      acc.push_back(~(s[1] - '1'));
    }
  }
  int cnt = 0;
  range(i, 0, n) {
    crime[i] = (pos[i] + total - neg[i]) == m;
    cnt += crime[i];
  }
  range(i, 0, n) {
    int v = acc[i];
    if(v >= 0) {
      if(!crime[v]) {
        cout << "Lie\n";
      } else {
        cout << (cnt > 1 ? "Not defined\n" : "Truth\n");
      }
    } else {
      v = ~v;
      if(!crime[v]) {
        cout << "Truth\n";
      } else {
        cout << (cnt > 1 ? "Not defined\n" : "Lie\n");
      }
    }
  }
  return 0;
}
