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 JAVA (judge verdict: Wrong Answer)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

/**
 * Lesson11B サイコロを転がすシミュレーションを行うプログラム
 *
 * @author Internship
 *
 */
public class Main{

	/**
	 * プログラムのエントリポイント
	 *
	 * @param args
	 */
	public static void main(String[] args) {

		// 答えの格納場所
		ArrayList<Integer> intAryAnswer = new ArrayList<Integer>();

		// 1行目取得
		BufferedReader insBR = new BufferedReader(new InputStreamReader(System.in));

		try {
			String strLine = insBR.readLine();

			// １つのサイコロを作成
			DiceNum insDiceNum = new DiceNum(strLine);

			// 2行目取得
			strLine = insBR.readLine();

			// 数を取得
			int intNum = Integer.parseInt(strLine);

			// 3行目以降取得
			for (int i = 0; i < intNum; i++) {

				strLine = insBR.readLine();

				// 上面と前面が引数の数字になるように転がす
				insDiceNum.determine(strLine);

				// 答えを取得
				int intAnswer = insDiceNum.getRightNum();

				// 答えを格納
				intAryAnswer.add(intAnswer);

			}

			// 答えが何個あるか取得
			int intSize = intAryAnswer.size();

			// 出力
			for (int i = 0; i < intSize; i++) {
				System.out.println(intAryAnswer.get(i));
			}

		} catch (IOException e) {
			System.out.println(e);
		}
	}

	/**
	 * サイコロの目を持っている
	 * @author Internship
	 *
	 */
	static class DiceNum {

		// サイコロ
		int[] intDice = new int[6];

		DiceNum() {

		}

		DiceNum(String strLine) {

			// 分解
			String[] strAryLine = strLine.split(" ");

			// さいころの面の各数字を格納
			for (int i = 0; i < strAryLine.length; i++) {
				intDice[i] = Integer.parseInt(strAryLine[i]);
			}

		}

		/**
		 * サイコロの右面を返す
		 */
		int getRightNum() {
			return intDice[2];
		}

		/**
		 * サイコロの上面と前面を引数を持ち,その通りになるように転がす
		 *
		 * @param strLine
		 *            サイコロの上面と前面をスペースを挟んで値を持っている
		 *
		 */
		void determine(String strLine) {
			// 分解
			String[] strAryLine = strLine.split(" ");

			// 上面の数を取得
			int intUnder = Integer.parseInt(strAryLine[0]);

			// 前面の数を取得
			int intFront = Integer.parseInt(strAryLine[1]);

			// 上面をintDice[0]になるように転がす
			adjustTop(intUnder);

			// 上面が固定された
			// 上面が最終的変わらないよう、前面が同じなるように転がす
			MaintainTopadjustFront(intFront);

		}

		/**
		 * 上面の数字を引数に持ち、その数字が上面に来るように転がす
		 *
		 * @param intNum
		 *            上面になってほしい数字
		 *
		 */
		void adjustTop(int intNum) {

			// 前面にきているので
			if (intNum == intDice[1]) {

				// Nへ転がす
				goNorth(intDice);
			}

			// 右面にきているので
			if (intNum == intDice[2]) {

				// Wへ転がす
				goWest(intDice);
			}

			// 左面にきているので
			if (intNum == intDice[3]) {

				// Eへ転がす
				goEast(intDice);
			}

			// 後面にきているので
			if (intNum == intDice[4]) {

				// Sへ転がす
				goSouth(intDice);
			}

			// 底面にきているので
			if (intNum == intDice[5]) {

				// EEへ転がす
				goEast(intDice);
				goEast(intDice);
			}

		}

		/**
		 * サイコロの上面が最終的に変わらないように前面が引数の数字になるように転がす
		 *
		 * @param intNum
		 *            前面がなってほしい値
		 */
		void MaintainTopadjustFront(int intNum) {

			// 右面にきているので
			if (intNum == intDice[2]) {

				// ENWへ転がす
				goEast(intDice);
				goNorth(intDice);
				goWest(intDice);
			}

			// 左面にきているので
			if (intNum == intDice[3]) {

				// WNEへ転がす
				goWest(intDice);
				goNorth(intDice);
				goEast(intDice);
			}

			// 後面にきているので
			if (intNum == intDice[3]) {

				// SSEEへ転がす
				goSouth(intDice);
				goSouth(intDice);
				goEast(intDice);
				goEast(intDice);
			}

		}

		/**
		 * Nの方へ転がした時にサイコロ目が変わる。 変わった状態へするメソッド
		 *
		 * @param intDice
		 */

		void goNorth(int[] intDice) {

			// サイコロ目を移動後のサイコロ
			int[] intAfter = new int[intDice.length];

			// サイコロ目を移す
			System.arraycopy(intDice, 1, intAfter, 0, 1);
			System.arraycopy(intDice, 5, intAfter, 1, 1);
			System.arraycopy(intDice, 2, intAfter, 2, 1);
			System.arraycopy(intDice, 3, intAfter, 3, 1);
			System.arraycopy(intDice, 0, intAfter, 4, 1);
			System.arraycopy(intDice, 4, intAfter, 5, 1);

			// 元のサイコロへコピー
			System.arraycopy(intAfter, 0, intDice, 0, 6);

		}

		/**
		 * Eの方へ転がした時にサイコロ目が変わる。 変わった状態へするメソッド
		 *
		 * @param intDice
		 */
		void goEast(int[] intDice) {

			// サイコロ目を移動後のサイコロ
			int[] intAfter = new int[intDice.length];

			// サイコロ目を移す
			System.arraycopy(intDice, 3, intAfter, 0, 1);
			System.arraycopy(intDice, 1, intAfter, 1, 1);
			System.arraycopy(intDice, 0, intAfter, 2, 1);
			System.arraycopy(intDice, 5, intAfter, 3, 1);
			System.arraycopy(intDice, 4, intAfter, 4, 1);
			System.arraycopy(intDice, 2, intAfter, 5, 1);

			// 元のサイコロへコピー
			System.arraycopy(intAfter, 0, intDice, 0, 6);

		}

		/**
		 * Wの方へ転がした時にサイコロ目が変わる。 変わった状態へするメソッド
		 *
		 * @param intDice
		 */
		void goWest(int[] intDice) {

			// サイコロ目を移動後のサイコロ
			int[] intAfter = new int[intDice.length];

			// サイコロ目を移す
			System.arraycopy(intDice, 2, intAfter, 0, 1);
			System.arraycopy(intDice, 1, intAfter, 1, 1);
			System.arraycopy(intDice, 5, intAfter, 2, 1);
			System.arraycopy(intDice, 0, intAfter, 3, 1);
			System.arraycopy(intDice, 4, intAfter, 4, 1);
			System.arraycopy(intDice, 3, intAfter, 5, 1);

			// 元のサイコロへコピー
			System.arraycopy(intAfter, 0, intDice, 0, 6);

		}

		/**
		 * Sの方へ転がした時にサイコロ目が変わる。 変わった状態へするメソッド
		 *
		 * @param intDice
		 */
		void goSouth(int[] intDice) {

			// サイコロ目を移動後のサイコロ
			int[] intAfter = new int[intDice.length];

			// サイコロ目を移す
			System.arraycopy(intDice, 4, intAfter, 0, 1);
			System.arraycopy(intDice, 0, intAfter, 1, 1);
			System.arraycopy(intDice, 2, intAfter, 2, 1);
			System.arraycopy(intDice, 3, intAfter, 3, 1);
			System.arraycopy(intDice, 5, intAfter, 4, 1);
			System.arraycopy(intDice, 1, intAfter, 5, 1);

			// 元のサイコロへコピー
			System.arraycopy(intAfter, 0, intDice, 0, 6);

		}
	}
}