//2012-02贪吃蛇
#include <iostream>
#include <string>
#include <deque>
using namespace std;
bool g[51][51];
deque<pair<int, int>> q;
int main()
{
int n;
while (cin >> n, n)
{
memset(g, 0, sizeof g);
for (int i = 11; i <= 30; i++)
{
g[25][i] = 1;
q.push_back({ 25,i });
}
getchar();
string s;
getline(cin, s);
for (int i = 0; i <= s.size(); i++)
{
if (i == s.size())
{
cout << "The worm successfully made all " << i << " moves";
break;
}
int x = q.back().first;
int y = q.back().second; //(x,y)存储蛇头位置
if (s[i] == 'N')
{
if (--x > 0 && !g[x][y])
{
g[x][y] = 1;
q.push_back({ x - 1,y });
q.pop_front();
}
else
{
if (g[x][y])
cout << "The worm run into itself on move " << i-1 << endl;
else
cout << "The worm ran off the board on move " << i-1 << endl;
break;
}
continue;
}
if (s[i] == 'S')
{
if (++x <= 50 && !g[x][y])
{
g[x][y] = 1;
q.push_back({ x + 1,y });
q.pop_front();
}
else
{
if (g[x][y])
cout << "The worm run into itself on move " << i-1 << endl;
else
cout << "The worm ran off the board on move " << i-1 << endl;
break;
}
continue;
}
if (s[i] == 'W')
{
if (--y > 0 && !g[x][y])
{
g[x][y] = 1;
q.push_back({ x ,y - 1 });
q.pop_front();
}
else
{
if (g[x][y])
cout << "The worm run into itself on move " << i-1 << endl;
else
cout << "The worm ran off the board on move " << i-1 << endl;
break;
}
continue;
}
if (s[i] == 'E')
{
if (++y <= 50 && !g[x][y])
{
g[x][y] = 1;
q.push_back({ x ,y + 1 });
q.pop_front();
}
else
{
if (g[x][y])
cout << "The worm run into itself on move " << i-1 << endl;
else
cout << "The worm ran off the board on move " << i-1 << endl;
break;
}
continue;
}
}
}
return 0;
}