output_description: If there is no assignment satisfying the conditions, print a single line
  containing `-1`.
  
  If such an assignment exists, print one such assignment in the following
  format:
  
      
      
      S
      C_1
      C_2
      \vdots
      C_M
      
  
  Here,
  
    * the first line should contain the string S of length N. Its i-th character (1 \leq i \leq N) should be `W` if Vertex i is assigned white and `B` if it is assigned black.
    * The (i + 1)-th line (1 \leq i \leq M) should contain the integer weight C_i assigned to Edge i.
  
  * * *
input_description: Input is given from Standard Input in the following format:
  
      
      
      N M
      D_1 D_2 ... D_N
      U_1 V_1
      U_2 V_2
      \vdots
      U_M V_M
attempt: def main():
      import sys
  
      input = sys.stdin.readline
  
      # MAX = 10 ** 9
  
      N, M = map(int, input().split())
      D = list(map(int, input().split()))
  
      v_color = [-1] * N
      check = [1] * N  # 0のとき条件を満たしているとする
      G = [[] for _ in range(N)]
      for i in range(M):
          U, V = map(int, input().split())
          U -= 1
          V -= 1
          G[U].append([V, i])
          G[V].append([U, i])
  
      # ここまで入力
  
      v_color[0] = 1  # 最初の頂点を白色(1)にする
      stack = [0]  # スタートする点　深さ優先探索で調べる
      weight = [-1] * M
      while stack:
          tmp = stack.pop()
          tmp_color = v_color[tmp]
          for lst in G[tmp]:
              next_ = lst[0]
              i = lst[1]
              if v_color[next_] == -1:  # 初めて訪れるとき
                  # 違う色にする
                  if D[tmp] == D[next_]:  # 距離が同じなら両方OKにする
                      check[tmp] = 0
                      check[next_] = 0
                  elif D[tmp] < D[next_]:
                      check[next_] = 0
                  else:
                      check[tmp] = 0
                  stack.append(next_)
                  v_color[next_] = 1 - tmp_color
                  weight[i] = max(D[tmp], D[next_])
              else:
                  if (
                      tmp_color == v_color[next_]
                  ):  # 同じ色のとき #回り道してOkできるようにしておく
                      weight[i] = max(abs(D[tmp] - D[next_]), 1)
                      if D[tmp] < D[next_] and check[tmp] == 0:
                          check[next_] = 0
                      elif D[next_] < D[tmp] and check[next_] == 0:
                          check[tmp] = 0
                  else:
                      if D[tmp] >= D[next_]:
                          check[tmp] = 0
                      if D[tmp] <= D[next_]:
                          check[next_] = 0
                      weight[i] = max(D[tmp], D[next_])
  
      # print (v_color)
      # print (weight)
      # print (check)
  
      if max(check) == 1:
          print(-1)
          exit()
  
      for i in v_color:
          if i:
              print("W", end="")
          else:
              print("B", end="")
      print()
  
      print(*weight, sep="\n")
  
  
  if __name__ == "__main__":
      main()
  
problem_description: Statement
  
  We have a connected undirected graph with N vertices and M edges. Edge i in
  this graph (1 \leq i \leq M) connects Vertex U_i and Vertex V_i
  bidirectionally. We are additionally given N integers D_1, D_2, ..., D_N.
  
  Determine whether the conditions below can be satisfied by assigning a color -
  white or black - to each vertex and an integer weight between 1 and 10^9
  (inclusive) to each edge in this graph. If the answer is yes, find one such
  assignment of colors and integers, too.
  
    * There is at least one vertex assigned white and at least one vertex assigned black.
    * For each vertex v (1 \leq v \leq N), the following holds.
      * The minimum cost to travel from Vertex v to a vertex whose color assigned is different from that of Vertex v by traversing the edges is equal to D_v.
  
  Here, the cost of traversing the edges is the sum of the weights of the edges
  traversed.
samples: [{"input": "5 5\n    3 4 3 5 7\n    1 2\n    1 3\n    3 2\n    4 2\n    4 5", "output": "BWWBB\n    4\n    3\n    1\n    5\n    2\n    \n\nAssume that we assign the colors and integers as the sample output, and let us\nconsider Vertex 5, for example. To travel from Vertex 5, which is assigned\nblack, to a vertex that is assigned white with the minimum cost, we should\nmake these moves: Vertex 5 \\to Vertex 4 \\to Vertex 2. The total cost of these\nmoves is 7, which satisfies the condition. We can also verify that the\ncondition is satisfied for other vertices.\n\n* * *"}, {"input": "5 7\n    1 2 3 4 5\n    1 2\n    1 3\n    1 4\n    2 3\n    2 5\n    3 5\n    4 5", "output": "-1\n    \n\n* * *"}, {"input": "4 6\n    1 1 1 1\n    1 2\n    1 3\n    1 4\n    2 3\n    2 4\n    3 4", "output": "BBBW\n    1\n    1\n    1\n    2\n    1\n    1"}]