def calcs(x,y,ax,ay,bx,by) ((ax-x)*(by-y)-(bx-x)*(ay-y))/2.0 end

def inpf() a=gets.chomp.split(" ").map(&:to_f)end

def inps() a=gets.chomp.split(" ")end

def copy(a) Marshal.load(Marshal.dump(a)) end

def factorial(n,r)(n < 2)? 1 : (2..n).inject{|memo,m| memo=(memo*m)%r} end

def scount(a) b=na(a.max+1);a.each{|n|b[n]+=1};return b end

def na(n,d=0) Array.new(n,d)end

def na2(n,m,d=0) Array.new(n){Array.new(m,d)}end

def na3(n,m,l,d=0) Array.new(n){Array.new(ym){Array.new(l,d)}}end

def yn(f) return (f)? "Yes": "No" end

def ynb(f) return (f)? "YES": "NO" end

def ap(a) a.each{|u| p u} end

def bit(n) n.to_s(2).split("").map(&:to_i) end

def inp() a=gets.chomp.split(" ").map(&:to_i)end

n = inp[0]
s = gets.chomp
r = 998244353
ans = factorial(n,r)
a1 = na(3,0)
a2 = na(3,0)

h = {"R" => 0,"B" => 1,"G" => 2}
(3*n).times do |i|
  c = s[i]
  fsum = a1.inject(:+)
  ssum = a2.inject(:+)
  if(a2[h[c]] > 0)
    ans *= a2[h[c]]
    a2[h[c]] -= 1
    next
  end
  if(a1[(h[c]+1)%3] > 0)
    ans *= a1[(h[c]+1)%3]
    a1[(h[c]+1)%3] -= 1
    a2[(h[c]+2)%3]  += 1
  end
  if(a1[(h[c]+2)%3] > 0)
    ans *= a1[(h[c]+2)%3]
    a1[(h[c]+2)%3]  -= 1
    a2[(h[c]+1)%3]  += 1
      p 999
  end
  if(fsum - a1[h[c]] == 0)
    a1[h[c]] += 1
  end
  ans %= r
end
p ans