#include <bits/stdc++.h>
using namespace std;
using namespace std;
const int MAXN = 8;
const int MAX_TIME = 1000;
char board[MAXN + 1][MAXN + 1];
bool visited[MAXN + 1][MAXN + 1][MAX_TIME];
bool inside(int x, int y) { return x >= 0 && y >= 0 && x < 8 && y < 8; }
int ruchyX[] = {0, 0, 1, 1, 1, -1, -1, -1};
int ruchyY[] = {-1, 1, -1, 0, 1, -1, 0, 1};
struct trojka {
  int x, y, t;
  trojka() {}
  trojka(int _x, int _y, int _t) : x(_x), y(_y), t(_t) {}
};
int main() {
  for (int i = 0; i < (8); ++i) {
    cin >> board[i];
  }
  queue<trojka> Q;
  visited[7][0][0] = true;
  Q.push(trojka(7, 0, 0));
  while (!Q.empty()) {
    trojka t = Q.front();
    Q.pop();
    if (t.t == MAX_TIME - 1) {
      break;
    }
    if (t.x == 0 && t.y == 7) {
      break;
    }
    if (t.x - t.t >= 0) {
      if (board[t.x - t.t][t.y] == 'S') continue;
    }
    if (t.x - t.t + 1 >= 0) {
      if (board[t.x - t.t + 1][t.y] == 'S') continue;
    }
    for (int i = 0; i < (8); ++i) {
      int nowyX = t.x + ruchyX[i];
      int nowyY = t.y + ruchyY[i];
      int nowyTime = t.t + 1;
      if (!inside(nowyX, nowyY)) {
        continue;
      }
      if (visited[nowyX][nowyY][nowyTime]) {
        continue;
      }
      visited[nowyX][nowyY][nowyTime] = true;
      Q.push(trojka(nowyX, nowyY, nowyTime));
    }
    ++t.t;
    Q.push(t);
  }
  for (int i = 0; i < (MAX_TIME); ++i)
    if (visited[0][7][i]) {
      cout << "WIN" << endl;
      return 0;
    }
  cout << "LOSE" << endl;
}
