#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:64000000")
using namespace std;
struct state {
  string s;
  int x1, x2, x3;
};
int n;
int c[4][101];
map<pair<int, int>, int> mapa;
state cur;
vector<state> v;
state h1, h2;
int ans = -((int)(1e9));
map<pair<int, int>, int>::iterator it;
void rec(int step, int last, bool f) {
  if (step > last) {
    if (f) {
      it = mapa.find(pair<int, int>(cur.x2 - cur.x1, cur.x3 - cur.x1));
      if (it == mapa.end()) {
        v.push_back(cur);
        mapa[pair<int, int>(cur.x2 - cur.x1, cur.x3 - cur.x1)] = v.size() - 1;
      } else if (v[(*it).second].x1 < cur.x1) {
        v[(*it).second] = cur;
      }
    } else {
      pair<long long, long long> d(cur.x1 - cur.x2, cur.x1 - cur.x3);
      auto it = mapa.find(d);
      if (it != mapa.end()) {
        if (cur.x1 + v[(*it).second].x1 > ans) {
          ans = cur.x1 + v[(*it).second].x1;
          h1 = v[(*it).second];
          h2 = cur;
        }
      }
    }
  } else {
    state old = cur;
    cur.s += "LM";
    cur.x1 += c[1][step];
    cur.x2 += c[2][step];
    rec(step + 1, last, f);
    cur = old;
    cur.s += "LW";
    cur.x1 += c[1][step];
    cur.x3 += c[3][step];
    rec(step + 1, last, f);
    cur = old;
    cur.s += "MW";
    cur.x2 += c[2][step];
    cur.x3 += c[3][step];
    rec(step + 1, last, f);
    cur = old;
  }
}
void solve() {
  v.reserve(2000000);
  scanf("%d", &n);
  for (int j = 1; j <= n; j++) {
    for (int i = 1; i <= 3; i++) {
      scanf("%d", &c[i][j]);
    }
  }
  cur.s = "";
  cur.x1 = cur.x2 = cur.x3 = 0LL;
  rec(1, (n >> 1), true);
  cur.s = "";
  cur.x1 = cur.x2 = cur.x3 = 0LL;
  rec((n >> 1) + 1, n, false);
  if (ans > -((int)(1e9))) {
    string s = h1.s + h2.s;
    for (int j = 0; j < n; j++) {
      printf("%s\n", s.substr((j << 1), 2).c_str());
    }
  } else {
    printf("Impossible\n");
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  srand(1337);
  solve();
  return 0;
}
