S = gets.chomp C = '(*^)' C_MIN = Array.new(4){ Array.new(S.size + 2, S.size) } RB = Array.new(S.size + 2, 0) (1 .. S.size).each do |d| i = S.size - d j_ = C.index(S[i]) 4.times{|j| C_MIN[j][i] = (j == j_ ? i : C_MIN[j][i + 1]) } RB[i] = (j_ == 3 ? RB[i + 1] + 1 : RB[i + 1]) end def count_face(dir) mid = dir.chars.map{|c| C.index(c) } face = 0 l = 0 while l < S.size l = C_MIN[0][l] + 1 face += RB[mid.inject(l){|i,j| C_MIN[j][i] + 1 }] end face end rface = count_face('*^^') lface = count_face('^^*') puts "#{lface} #{rface}"