Problem:
バス路線

図 1のようなバス路線があります。停留所は 10 箇所で、それぞれ 0〜9 の番号がついています。バスは停留所 0 では折り返しますが、反対側は循環路線になっており、図のように 5→6→7→8→9→5 の順で循環します。

このバス路線について、乗車する停留所と降車する停留所を入力とし、乗車から降車までに通る停留所の番号を出力するプログラムを作成してください。

ただし、1〜5 の停留所では 2 方向のバスに乗車できますが、より短い経路で降車停留所に到着するバスに乗車することとします。例えば、停留所 4 から停留所 2 へ行く場合、左方向に進むバスに乗り「4→3→2」の経路を通ります。また、一度バスに乗車したら途中下車はしないものとします。同じ停留所を乗車停留所、降車停留所に指定することはありません。

Input

複数のデータセットが与えられます。一行目にデータセット数 n (n ≤ 20 ) が与えられます。各データセットとして、乗車する停留所番号と降車する停留所番号が空白区切りで１行に与えられます。

Output

各データセットに対して、通過する停留所番号の並びを空白区切りで１行に出力してください。

Sample Input

2
2 4
4 2

Output for the Sample Input

2 3 4
4 3 2

Solution in JAVA (judge verdict: Accepted)


import static java.util.Arrays.deepToString;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		new Main().run();
	}
	void tr(Object... os) {
		System.err.println(deepToString(os));
	}

	Scanner sc = new Scanner(System.in);
	public void run() {
		int t = sc.nextInt();
		for (int ttt = 0; ttt < t; ttt++) {
			int from = sc.nextInt();
			int to = sc.nextInt();
			int[] a = solve(from, to);
			System.out.print(a[0]);
			for (int i = 1; i < a.length; i++) System.out.print(" " + a[i]);
			System.out.println();
		}
	}
	
	int[] solve(int from, int to) {
		int[] st = {
				0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 5, 4, 3, 2, 1,
				0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 5, 4, 3, 2, 1,};

		ArrayList<Integer> ans = null;
		for (int i = 0; i < st.length / 2; i++) {
			if (st[i] == from) {
				ArrayList<Integer> cur = new ArrayList<Integer>();
				int x = i;
				while (st[x] != to) {
					cur.add(st[x]);
					x++;
				}
				cur.add(to);
				if (ans == null || ans.size() > cur.size()) {
					ans = cur;
				}
			}
		}
		return toIntArray(ans);
	}
	public static <T> int[] toIntArray(Collection<T> src) {
		int[] res = new int[src.size()];
		int p = 0;
		for (T x : src) res[p++] = (Integer)x;
		return res;
	}
}