#include <bits/stdc++.h>
using namespace std;
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#define pb push_back
#define mp make_pair
#define all(a)      (a).begin(),(a).end()
#define debug_array(a,n) for (ll bccc=(0); bccc<(n); bccc++) cout<<a[bccc]<<" "
#define debug_vector(a) for(ll bccc=(0); bccc<(a.size());bccc++) cout<<a[bccc]<<" "
#define F           first
#define S           second
#define trace(x) cerr<<#x<<": "<<x<<" "<<endl;
typedef long long ll;
using namespace __gnu_pbds;
typedef tree<pair<ll,ll>,null_type,less<pair<ll,ll> >,rb_tree_tag,tree_order_statistics_node_update> ordered_multiset;
/* ll t = 0;
ordered_multiset me;
...
me.insert({x, t++});
me.erase(me.lower_bound({x, 0}));
cout << me.order_of_key({x, 0}) << "\n";

///////////   t is insertion time
*/
#define ordered_set tree<ll, null_type,less<ll>, rb_tree_tag,tree_order_statistics_node_update>
typedef long double lld;
lld pi=3.14159265358;
ll powr(ll a,ll b)
{
    ll c=1;
    ll i;
    for(i=0;i<b;i++)
        c*=a;
    return c;
}
ll hell=1000000007;
//ll hell=998244353 ;
ll power(ll x, ll y, ll p)
{
    ll res = 1;
    x = x % p;
    while (y > 0)
    {
        if (y & 1)
            res = (res*x) % p;
        y = y>>1;
        x = (x*x) % p;
    }
    return res;
}
// mt19937 rng(chrono::high_resolution_clock::now().time_since_epoch().count());  after namespace std
// srand(chrono::high_resolution_clock::now().time_since_epoch().count()); after ios:base
//freopen("input.txt", "r", stdin);
//freopen("output.txt", "w", stdout);
ll did[100005];
ll didnt[100005];
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    ll n,m,i,p;
    cin>>n>>m;
    vector<pair<char,ll> >v;
    for(i=0;i<n;i++)
    {
        string s;
        cin>>s;
        if(s[0]=='+')
        {
            string s1=s.substr(1LL,s.size()-1);
            ll k=0;
            reverse(all(s1));
            for(p=0;p<s1.size();p++)
            {
                k+=(s1[p]-'0')*powr(10LL,p);
            }
            did[k]++;
            v.pb(mp('+',k));
        }
        else
        {
            string s1=s.substr(1LL,s.size()-1);
            ll k=0;
            reverse(all(s1));
            for(p=0;p<s1.size();p++)
            {
                k+=(s1[p]-'0')*powr(10LL,p);
            }
            didnt[k]++;
            v.pb(mp('-',k));
        }
    }
    vector<ll> potential_criminals;
    ll tot_didnt=0;
    for(i=0;i<100005;i++)
        tot_didnt+=didnt[i];
    for(i=1;i<=n;i++)
    {
        if((did[i]+tot_didnt-didnt[i])==m)
            potential_criminals.pb(i);
    }
    if(potential_criminals.size()==1LL)
    {
        ll criminal=potential_criminals[0];
        for(i=0;i<n;i++)
        {
            if(v[i].F=='+' && v[i].S==criminal)
                cout<<"Truth";
            else if(v[i].F=='-' && v[i].S!=criminal)
                cout<<"Truth";
            else
                cout<<"Lie";
            cout<<"\n";
        }
        return 0;
    }
    for(i=0;i<n;i++)
    {
        if(v[i].F=='+')
        {
            if(binary_search(all(potential_criminals),v[i].S))
                cout<<"Not Defined";
            else
                cout<<"Lie";
        }
        else
        {

                cout<<"Not Defined";
        }
        cout<<"\n";
    }

    return 0;
}
