Problem:
MathJax.Hub.Config({ tex2jax: { inlineMath: [["$","$"], ["\\(","\\)"]], processEscapes: true }});

Dice II

Construct a dice from a given sequence of integers in the same way as Dice I.

You are given integers on the top face and the front face after the dice was rolled in the same way as Dice I. Write a program to print an integer on the right side face.

Input

In the first line, six integers assigned to faces are given in ascending order of their corresponding labels.
In the second line, the number of questions $q$ is given.

In the following $q$ lines, $q$ questions are given. Each question consists of two integers on the top face and the front face respectively.

Output

For each question, print the integer on the right side face.

Constraints

$0 \leq $ the integer assigned to a face $ \leq 100$

The integers are all different

$1 \leq q \leq 24$

Sample Input

1 2 3 4 5 6
3
6 5
1 3
3 2

Sample Output

3
5
6

Solution in Ruby (judge verdict: Accepted)

# ITP1_11_B: Dice2

class Dice
  Side = Struct.new :neighbors, :back

  class << self
    def layout_sides(top, front, right, left, back, bottom)
      Hash.new.tap do |sides|
        sides[top]    = Side.new [front, right, back, left], bottom
        sides[front]  = Side.new [bottom, right, top, left], back
        sides[right]  = Side.new [bottom, back, top, front], left
        sides[left]   = Side.new [bottom, front, top, back], right
        sides[back]   = Side.new [top, right, bottom, left], front
        sides[bottom] = Side.new [back, right, front, left], top
      end
    end
  end

  def initialize(labels, top = labels[0], front = labels[1])
    @sides = Dice.layout_sides *labels
    put_as top, front
  end

  def put_as(top, front)
    neighbors  = @sides[top].neighbors
    org_idx    = neighbors.index(front)
    step       = org_idx % neighbors.size
    @neighbors = neighbors.rotate(step)
    @top_side  = top
    self
  end

  def pip_of(side)
    case side
    when :top
      @top_side
    when :bottom
      @sides[@top_side].back
    else
      @neighbors.at case side
      when :front then 0
      when :right then 1
      when :back  then 2
      when :left  then 3
      end
    end
  end
end

labels = gets.split.map &:to_i
n_changes = gets.to_i

dice = Dice.new labels
n_changes.times do
  top, front = gets.split.map &:to_i
  puts dice.put_as(top, front).pip_of(:right)
end