#include <bits/stdc++.h>
using namespace std;
long long mod = 1000000007;
long long mod2 = 998244353;
long long mod3 = 1000003;
long long mod4 = 998244853;
long long inf = 1000000000000000000;
long double pi = 3.14159265358979323846L;
double eps = 1e-12;
int dh[4] = {1, -1, 0, 0};
int dw[4] = {0, 0, 1, -1};
int ddh[8] = {-1, -1, -1, 0, 0, 1, 1, 1};
int ddw[8] = {-1, 0, 1, -1, 1, -1, 0, 1};
long long lmax(long long a, long long b) {
  if (a < b)
    return b;
  else
    return a;
}
long long lmin(long long a, long long b) {
  if (a < b)
    return a;
  else
    return b;
}
long long gcd(long long a, long long b) {
  if (a < b) swap(a, b);
  if (b == 0) return a;
  if (a % b == 0) return b;
  return gcd(b, a % b);
}
long long Pow(long long n, long long k) {
  long long ret = 1;
  long long now = n;
  while (k > 0) {
    if (k & 1) ret *= now;
    now *= now;
    k /= 2;
  }
  return ret;
}
long long gya[1000010];
long long kai[1000010];
long long beki(long long n, long long k, long long md) {
  long long ret = 1;
  long long now = n;
  while (k > 0) {
    if (k % 2 == 1) {
      ret *= now;
      ret %= md;
    }
    now *= now;
    now %= md;
    k /= 2;
  }
  return ret;
}
long long gyaku(long long n, long long md) { return beki(n, md - 2, md); }
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int n, m;
  cin >> n >> m;
  long long d[n + 1];
  vector<pair<long long, long long> > w;
  long long ff[m], gg[m];
  for (int i = 1; i < n + 1; i++) {
    cin >> d[i];
    w.push_back({d[i], i});
  }
  sort(w.begin(), w.end());
  vector<long long> v[n + 1];
  for (int i = 0; i < m; i++) {
    long long f, g;
    cin >> f >> g;
    ff[i] = f;
    gg[i] = g;
    v[f].push_back(g);
    v[g].push_back(f);
  }
  long long col[n + 1];
  fill(col, col + n + 1, -1);
  map<pair<long long, long long>, long long> mp;
  for (int i = 0; i < n; i++) {
    long long now = w[i].second, dis = w[i].first;
    if (col[now] >= 0) continue;
    long long num = -1;
    for (int j = 0; j < v[now].size(); j++) {
      long long ne = v[now][j];
      if (col[ne] >= 0) {
        num = ne;
        break;
      }
    }
    if (num == -1) {
      for (int j = 0; j < v[now].size(); j++) {
        long long ne = v[now][j];
        if (d[ne] == dis) {
          num = ne;
          break;
        }
      }
      if (num == -1) {
        cout << -1 << endl;
        return 0;
      }
      mp[{now, num}] = dis;
      mp[{num, now}] = dis;
      col[now] = 0;
      col[num] = 1;
    } else {
      col[now] = col[num] ^ 1;
      mp[{now, num}] = dis;
      mp[{num, now}] = dis;
      for (int j = 0; j < v[now].size(); j++) {
        long long ne = v[now][j];
        if (num == ne) continue;
        if (col[ne] >= 0) {
          mp[{now, ne}] = 1000000000;
          mp[{ne, now}] = 1000000000;
        }
      }
    }
  }
  for (int i = 1; i < n + 1; i++) {
    if (col[i] == 0)
      cout << "B";
    else
      cout << "W";
  }
  cout << endl;
  for (int i = 0; i < m; i++) {
    cout << mp[{ff[i], gg[i]}] << endl;
  }
}
