#include <bits/stdc++.h>
using namespace std;
const int INF = (int)1E9;
const long long LINF = (long long)4E18;
const long double PI = acos(-1.0);
const long double E = 2.718281828459045L;
template <typename T>
T gcd(T a, T b) {
  return (b == 0) ? abs(a) : gcd(b, a % b);
}
template <typename T>
inline T lcm(T a, T b) {
  return a / gcd(a, b) * b;
}
template <typename T>
inline T mod(T a, T b) {
  return (a % b + b) % b;
}
template <typename T>
inline T sqr(T x) {
  return x * x;
}
template <typename T>
inline string toString(const T& x) {
  ostringstream os;
  os << x;
  return os.str();
}
inline long long toInt(const string& s) {
  istringstream is(s);
  long long x;
  is >> x;
  return x;
}
inline long double toDouble(const string& s) {
  istringstream is(s);
  long double x;
  is >> x;
  return x;
}
const char DEBUG_PARAM[] = "__LOCAL_TESTING";
const char IN[] = "_.in";
const char OUT[] = "_.out";
inline void init();
inline void run();
int ntest = 0, test;
int main(int argc, char* argv[]) {
  if (argc > 1 && strcmp(argv[1], DEBUG_PARAM) == 0) {
    freopen(IN, "r", stdin);
  }
  init();
  if (ntest == 0) {
    puts("ntest = ?");
    return 0;
  }
  for (test = 1; test <= ntest; test++) {
    run();
  }
  return 0;
}
inline void stop() { ntest = test - 1; }
const int dx[] = {-1, -1, -1, 0, 0, 0, 1, 1, 1};
const int dy[] = {-1, 0, 1, -1, 0, 1, -1, 0, 1};
const long double EPS = 1E-9;
const long long MODULE = 1000000007LL;
inline void init() { ntest = 1; }
const int MAXN = 10;
string a[MAXN];
int mx, my, ax, ay;
int sx[MAXN * MAXN], sy[MAXN * MAXN], numS;
bool visited[MAXN][MAXN][MAXN * MAXN];
inline void run() {
  numS = 0;
  for (int i = 0; i < (8); i++) {
    getline(cin, a[i]);
    for (int j = 0; j < (8); j++) {
      if (a[i][j] == 'M') {
        mx = i, my = j;
      } else if (a[i][j] == 'A') {
        ax = i, ay = j;
      } else if (a[i][j] == 'S') {
        sx[numS] = i, sy[numS] = j;
        numS++;
      }
    }
  }
  memset((visited), (false), sizeof(visited));
  queue<int> q;
  q.push(mx), q.push(my), q.push(0);
  visited[mx][my][0] = true;
  while (!q.empty()) {
    int x = q.front();
    q.pop();
    int y = q.front();
    q.pop();
    int step = q.front();
    q.pop();
    if (x == ax && y == ay) {
      puts("WIN");
      return;
    }
    for (int d = 0; d < (9); d++) {
      int nx = x + dx[d], ny = y + dy[d], nStep = step + 1;
      if (nx < 0 || nx >= 8 || ny < 0 || ny >= 8 || nStep > 95) {
        continue;
      }
      if (!visited[nx][ny][nStep]) {
        bool valid = true;
        for (int i = 0; i < (numS); i++) {
          if ((sx[i] + nStep == nx || sx[i] + step == nx) && sy[i] == ny) {
            valid = false;
            break;
          }
        }
        if (!valid) continue;
        q.push(nx), q.push(ny), q.push(nStep);
        visited[nx][ny][nStep] = true;
      }
    }
  }
  puts("LOSE");
}
