#include <iostream>
#include <vector>
#include <cstring>
#include <queue>
using namespace std;
const int MAXN = 105;
const int INF = 0x3f3f3f3f;
struct Edge //边
{
int to; //终点
int cost; //权值
};
vector<Edge> G[MAXN]; //各结点出发的边
int vis[MAXN], dist[MAXN], inqueue[MAXN];
int n, m;
void add_edge(int u, int v, int c)
{
Edge temp;
temp.to = v;
temp.cost = c;
G[u].push_back(temp);
}
void input_build()
{
cin >> m;
for (int i = 0; i < MAXN; i++)
G[i].clear();
int st, len, k;
char s[5];
for (int i = 0; i < m; i++)
{
cin >> st >> len >> s >> k;
st++;
if (s[0] == 'g')
add_edge(st - 1, st + len, k + 1);
else
add_edge(st + len, st - 1, 1 - k);
}
for (int i = 1; i <= n + 1; i++)
add_edge(0, i, 0);
}
bool SPFA()
{
for (int i = 0; i < MAXN; i++)
{
vis[i] = 0;
inqueue[i] = 0;
dist[i] = -INF;
}
dist[0] = 0;
vis[0] = inqueue[0] = 1;
queue<int> q;
q.push(0);
while (!q.empty())
{
int now = q.front();
q.pop();
vis[now] = 0;
for (int i = 0; i < G[now].size(); i++)
{
Edge e = G[now][i];
if (dist[e.to] < dist[now] + e.cost)
{
dist[e.to] = dist[now] + e.cost;
if (!vis[e.to])
{
if (++inqueue[e.to] > n + 1) //图中存在环
return false;
vis[e.to] = 1;
q.push(e.to);
}
}
}
}
return true;
}
int main()
{
while (cin >> n)
{
if (n == 0)
break;
input_build();
if (SPFA())
cout << "lamentable kingdom" << endl;
else
cout << "successful conspiracy" << endl;
}
return 0;
}