#include <bits/stdc++.h>
using namespace std;
struct gozare {
  char sym;
  int a, i;
  gozare() {}
  gozare(int i2, char s, int b) {
    i = i2;
    sym = s;
    a = b;
  }
  bool operator==(gozare a2) { return sym == a2.sym && a2.a == a; }
};
int n, m;
set<int> Truth, Lie;
vector<gozare> dg;
int stoi2(string s) {
  int r = 0;
  for (int i = 0; i < s.length(); i++) r = r * 10 + (s[i] - '0');
  return r;
}
void DFS(vector<gozare> g, int m) {
  if (m == 0) {
    vector<int> Moj, Big;
    set<int> MojF, BigF;
    set<int> T, L;
    for (vector<gozare>::iterator it = g.begin(); it != g.end(); it++) {
      L.insert((*it).i);
      if ((*it).sym == '+') {
        Big.push_back((*it).a);
        BigF.insert((*it).a);
      } else {
        Moj.push_back((*it).a);
        MojF.insert((*it).a);
      }
    }
    bool b = false;
    for (vector<gozare>::iterator it = dg.begin(); it != dg.end(); it++) {
      if (L.find((*it).i) != L.end()) continue;
      T.insert((*it).i);
      if ((*it).sym == '+') {
        Moj.push_back((*it).a);
        MojF.insert((*it).a);
      } else {
        Big.push_back((*it).a);
        BigF.insert((*it).a);
      }
    }
    for (vector<gozare>::iterator it = dg.begin(); it != dg.end(); it++) {
      if (L.find((*it).i) != L.end()) {
        if ((*it).sym == '+') {
          if (MojF.find((*it).a) != MojF.end()) b = true;
        } else {
          if (BigF.find((*it).a) != BigF.end()) b = true;
        }
      }
    }
    for (vector<int>::iterator it = Moj.begin(); it != Moj.end(); it++)
      if (BigF.find((*it)) != BigF.end()) b = true;
    if (MojF.size() > 1 || b) return;
    for (set<int>::iterator it = T.begin(); it != T.end(); it++)
      Truth.insert((*it));
    for (set<int>::iterator it = L.begin(); it != L.end(); it++)
      Lie.insert((*it));
    return;
  }
  for (vector<gozare>::iterator it = g.begin(); it != g.end(); it++) {
    vector<gozare> gt = g;
    gt.erase(it - g.begin() + gt.begin());
    DFS(gt, m - 1);
  }
}
int main() {
  cin >> n >> m;
  cin.ignore();
  for (int i = 0; i < n; i++) {
    string s;
    getline(cin, s);
    dg.push_back(gozare(i, s[0], stoi2(s.substr(1)) - 1));
  }
  vector<gozare> dg2;
  for (vector<gozare>::iterator it = dg.begin(); it != dg.end(); it++) {
    int c = 0;
    for (vector<gozare>::iterator it2 = dg.begin(); it2 != dg.end(); it2++)
      if ((*it) == (*it2)) c++;
    if (c <= m) dg2.push_back(*it);
  }
  dg = dg2;
  if (m == 0) {
    for (int i = 0; i < n; i++) cout << "Lie" << endl;
    return 0;
  }
  if (m == n) {
    for (int i = 0; i < n; i++) cout << "Truth" << endl;
    return 0;
  }
  DFS(dg, m);
  for (int i = 0; i < n; i++) {
    set<int>::iterator TP = Truth.find(i);
    set<int>::iterator LP = Lie.find(i);
    if (TP != Truth.end() && LP == Lie.end())
      cout << "Truth" << endl;
    else if (TP == Truth.end() && LP != Lie.end())
      cout << "Lie" << endl;
    else
      cout << "Not defined" << endl;
  }
}
