#include <bits/stdc++.h>
using namespace std;
int main() {
  int N, M;
  cin >> N >> M;
  vector<int> D(N);
  for (int i = 0; i < N; i++) cin >> D[i];
  vector<vector<pair<int, int>>> edge(N + 1);
  for (int i = 0; i < M; i++) {
    int u, v;
    cin >> u >> v;
    edge[u].push_back({v, i + 1});
    edge[v].push_back({u, i + 1});
  }
  vector<int> anse(M + 1, 1000000000), ansv(N + 1, 0);
  vector<pair<int, int>> p(N);
  for (int i = 0; i < N; i++) p[i] = {D[i], i + 1};
  sort(p.begin(), p.end());
  if (p[0].first != p[1].first) {
    cout << -1 << endl;
    return 0;
  }
  for (int i = 0; i < N; i++) {
    int now = p[i].second;
    for (auto pair : edge[now]) {
      int nxt = pair.first;
      if (ansv[nxt] > 0) {
        anse[pair.second] = p[i].first;
        ansv[now] = 3 - ansv[nxt];
        break;
      }
    }
    if (ansv[now] == 0) {
      int me = edge[now][0].second, mv = edge[now][0].first;
      for (auto pair : edge[now]) {
        if (D[mv - 1] > D[pair.first - 1]) {
          mv = pair.first;
          me = pair.second;
        }
      }
      if (D[mv - 1] > D[now - 1]) {
        cout << -1 << endl;
        return 0;
      }
      anse[me] = D[now - 1];
      ansv[now] = 1;
      ansv[mv] = 2;
    }
  }
  for (int i = 1; i <= N; i++) {
    cout << ((ansv[i] == 1) ? 'B' : 'W');
  }
  cout << endl;
  for (int i = 1; i <= M; i++) {
    cout << anse[i] << endl;
  }
  return 0;
}
