#include <bits/stdc++.h>
using namespace std;
const int MAXN = 123456;
vector<pair<int, int> > G[MAXN];
int D[MAXN], color[MAXN];
int ans[2 * MAXN];
int A[MAXN], B[MAXN];
int main() {
  int N, M;
  scanf("%d %d", &N, &M);
  vector<pair<int, int> > V;
  for (int i = 1; i <= N; i++) {
    scanf("%d", &D[i]);
    V.push_back(make_pair(D[i], i));
  }
  for (int i = 0; i < M; i++) {
    int a, b;
    scanf("%d %d", &a, &b);
    A[i] = a;
    B[i] = b;
    G[a].push_back(make_pair(i, b));
    G[b].push_back(make_pair(i, a));
  }
  sort(V.begin(), V.end());
  for (int i = 0; i < N; i++) {
    int cur = V[i].second;
    bool OK = false;
    for (auto j : G[cur]) {
      int to = j.second;
      if (D[to] <= D[cur]) OK = true;
    }
    if (!OK) assert(false);
  }
  for (int i = 0; i < N; i++) {
    int cur = V[i].second;
    if (color[cur]) continue;
    for (auto j : G[cur]) {
      int to = j.second, idx = j.first;
      if (D[to] > D[cur]) continue;
      if (color[to] == 0) {
        color[to] = 1;
        color[cur] = 2;
      } else if (color[to] == 1) {
        color[cur] = 2;
      } else {
        color[cur] = 1;
      }
      ans[idx] = D[cur];
      break;
    }
  }
  for (int i = 1; i <= N; i++) {
    if (!color[i]) assert(false);
    if (color[i] == 1)
      printf("B");
    else
      printf("W");
  }
  puts("");
  for (int i = 0; i < M; i++) {
    if (!ans[i]) ans[i] = (int)1e9;
    printf("%d\n", ans[i]);
  }
  return 0;
}
