#include <bits/stdc++.h>
using namespace std;
long long gcd(long long x, long long y) {
  if (y == 0) return x;
  return gcd(y, x % y);
}
long long lcm(long long x, long long y) { return x / gcd(x, y) * y; }
long long kai(long long x, long long y, long long m) {
  long long res = 1;
  for (long long i = x - y + 1; i <= x; i++) {
    res *= i;
    res %= m;
  }
  return res;
}
long long mod_pow(long long x, long long y, long long m) {
  long long res = 1;
  while (y > 0) {
    if (y & 1) {
      res = res * x % m;
    }
    x = x * x % m;
    y >>= 1;
  }
  return res;
}
long long comb(long long x, long long y, long long m) {
  if (y > x) return 0;
  return kai(x, y, m) * mod_pow(kai(y, y, m), m - 2, m) % m;
}
int n, m, a[200010], b[200010], d[100010];
pair<int, int> p[100010];
int ans1[100010];
int ans2[200010];
vector<pair<int, int>> vec[100010];
bool bl1[200010], bl2[100010];
signed main() {
  cin >> n >> m;
  for (int i = 0; i < n; i++) {
    cin >> d[i + 1];
    p[i].first = d[i + 1];
    p[i].second = i + 1;
  }
  for (int i = 0; i < m; i++) {
    cin >> a[i] >> b[i];
    vec[a[i]].push_back(make_pair(b[i], i));
    vec[b[i]].push_back(make_pair(a[i], i));
  }
  sort(p, p + n);
  for (int i = 0; i < n; i++) {
    int k = p[i].second;
    if (bl2[k]) continue;
    bool bo = false;
    for (int j = 0; j < (int)vec[k].size(); j++) {
      if (d[vec[k][j].first] <= d[k]) {
        bo = true;
        ans2[vec[k][j].second] = d[k];
        ans1[k] = 1 - ans1[vec[k][j].first];
        bl2[vec[k][j].first] = true;
      }
    }
    if (!bo) {
      cout << -1 << endl;
      return 0;
    }
  }
  for (int i = 1; i <= n; i++) {
    if (ans1[i] == 0)
      cout << 'W';
    else
      cout << 'B';
  }
  cout << endl;
  for (int i = 0; i < m; i++) {
    if (ans2[i] == 0)
      cout << 1000000000 << endl;
    else
      cout << ans2[i] << endl;
  }
}
