func_code_string: #include <bits/stdc++.h>   using namespace std;   template <typename T>   int size(T& a) {     return (int)a.size();   }   template <typename T>   T sqr(T a) {     return a * a;   }   #pragma comment(linker,  /STACK:60777216 )   const int INF = int(1e9);   char s[10][10];   bool can(int i, int j) { return i >= 0 && i < 8 && j >= 0 && j < 8; }   bool statue(int i, int j, int t) {     for (int u = 0; u < 8; ++u) {       if (s[u][j] ==  S ) {         int dif = (i - u);         if (t == dif) {           return false;         }       }     }     return true;   }   struct pos {     int i, j, t;     pos() {}     pos(int i, int j, int t) : i(i), j(j), t(t) {}   };   int dist[8][8][200];   int dj[9] = {+1, +1, 0, -1, -1, -1, 0, 1, 0};   int di[9] = {0, +1, +1, +1, 0, -1, -1, -1, 0};   int main() {     queue<pos> q;     for (int i = (0); i < (8); ++i) gets(s[i]);     memset((dist), (255), sizeof(dist));     for (int i = (0); i < (8); ++i)       for (int j = (0); j < (8); ++j)         if (s[i][j] ==  M ) {           q.push(pos(i, j, 0));           dist[i][j][0] = 0;         }     while (size(q)) {       pos p = q.front();       q.pop();       if (s[p.i][p.j] ==  A ) {         cout <<  WIN ;         exit(0);       }       for (int u = (0); u < (9); ++u) {         int ni = p.i + di[u];         int nj = p.j + dj[u];         if (can(ni, nj) && statue(ni, nj, p.t) && statue(ni, nj, p.t + 1) &&             dist[ni][nj][p.t + 1] == -1) {           dist[ni][nj][p.t + 1] = 1;           q.push(pos(ni, nj, p.t + 1));         }       }     }     for (int i = (0); i < (8); ++i)       for (int j = (0); j < (8); ++j)         if (s[i][j] ==  A ) {           for (int t = (0); t < (200); ++t)             if (dist[i][j][t] != -1) {               cout <<  WIN ;               exit(0);             }         }     cout <<  LOSE ;   }   