#include <stdio.h>
#include <algorithm>
#define debug(format,...) fprintf(stderr, format, __VA_ARGS__)
class Ant;
bool operator< (const Ant&, const Ant &);
class Ant {
public:
bool left;
int id;
int time;
friend bool operator< (const Ant&, const Ant &);
/* bool operator<= (const Ant &ant) {
return this->id <= ant.id;
}*/
void reverse(Ant *ant) {
std::swap<int>(this->time, ant->time);
this->left = !this->left;
ant->left = !ant->left;
}
bool compare(Ant *ant) {
if(!this->left && ant->left) {
this->reverse(ant);
return true;
}
return false;
}
};
bool operator< (const Ant &ant1, const Ant &ant2) {
return ant1.id < ant2.id;
}
int main() {
Ant ant[100000];
int ants, pos, len, i;
int maxTime=-1, maxAnt1=-1, maxAnt2=-1;
char dir[3];
while(scanf("%d %d", &len, &ants)>0) {
for(i=0; i<ants; i++) {
scanf("%d %s", &pos, dir);
ant[i].id = pos;
ant[i].left = (dir[0]=='L');
ant[i].time = (ant[i].left ? pos : len-pos);
if(maxTime==ant[i].time) {
maxAnt2=pos;
}else if (maxTime<ant[i].time) {
maxTime = ant[i].time;
maxAnt1=pos;
maxAnt2=-1;
}
}
std::sort(ant+0, ant+ants);
for(i=0; i<ants-1;) {
if(ant[i].compare(ant+i+1) && i>0) {
if(i>0) {
i--;
} else {
i++;
}
}else {
i++;
}
}
maxTime = maxAnt2 = -1;
for(i=0; i<ants; i++) {
if(ant[i].time == maxTime) {
maxAnt2 = ant[i].id;
}else if (ant[i].time > maxTime) {
maxAnt1 = ant[i].id;
maxAnt2 = -1;
maxTime = ant[i].time;
}
}
if (maxAnt2 == -1) {
printf(
"The last ant will fall down in %d seconds - started at %d.\n",
maxTime, maxAnt1);
}else {
printf(
"The last ant will fall down in %d seconds - started at %d and %d.\n",
maxTime, maxAnt1, maxAnt2);
}
}
return 0;
}