S = gets.chomp N = S.size D = 26.times.map { gets.split.map(&:to_i) } memo = Hash.new { |h, k| h[k] = [] } N.times do |i| ch = S[i] memo[ch] << i end ans = [] 26.times do |i| c1 = ('a'.ord + i).chr row = [] 26.times do |j| c2 = ('a'.ord + j).chr d = D[i][j] if memo[c1].empty? || memo[c2].empty? row << 'Y' else ok = true memo[c1].each do |x| res = memo[c2].bsearch { |y| y > x } if res && x + d > res ok = false end end if ok row << 'Y' else row << 'N' end end end ans << row end puts ans.map { |row| row.join(' ') }