public String dukePath(int n, String initPosition) {
		boolean[][] checked = new boolean[n][n];
		int column = initPosition.charAt(0) - 'a';
		int row = initPosition.charAt(1) - '1';
		checked[column][row] = true;
		// 右、上、下、左
		int[] vx = { 1, 0, 0, -1 };
		int[] vy = { 0, 1, -1, 0 };
		ArrayList<Integer> list = new ArrayList<Integer>();
		list.add(column * 10 + row);
		while (true) {
			boolean hit = false;
			for (int i = 0; i < vy.length; i++) {
				// とりあえず右を目指す
				int c = column + vx[i];
				int r = row + vy[i];
				if (cRange(c, checked.length) && cRange(r, checked[0].length)) {
					if (!checked[c][r]) {
						// 既に、行ってなければ
						checked[c][r] = true;
						// 場所の更新
						column = c;
						row = r;
						list.add(column * 10 + row);
						hit = true;
						break;
					}
				}
			}
			// 全て行き尽くした
			if (!hit) {
				break;
			}
		}
		String str = "";
		for (Integer i : list) {
			if (str.length() > 0) {
				str += "-";
			}
			str += getStr(i);
		}
		if (str.length() > 40) {
			return str.substring(0, 20) + "..." +
					str.substring(str.length() - 20, str.length());
		} else {
			return str;
		}
	}