public static String findMinRoute() {
		String start = "0122112211221122";
		String end = "0212212112122121";
		Set<String> map = new HashSet<String>();
		map.add(start);
		
		Queue<String> nextPattern = new LinkedList<String>();
		nextPattern.add(start);
		Queue<String> count= new LinkedList<String>();
		count.add("");
		String path = "";
		while(!nextPattern.isEmpty()) {
			String current = nextPattern.poll();
			path = count.poll();
			if(current.equals(end)) {
				break;
			}
			int[][] currentPattern = String2Pattern(current);
			
			
			String currentPatternLeft = pattern2String(exchange(currentPattern, GO_LEFT));
			
			if(!map.contains(currentPatternLeft)) {
				count.add(path+"0");
				map.add(currentPatternLeft);
				nextPattern.add(currentPatternLeft);
			}
			currentPattern = String2Pattern(current);
			String currentPatternRight = pattern2String(exchange(currentPattern, GO_RIGHT));
			
			if(!map.contains(currentPatternRight)) {
				count.add(path+"1");
				map.add(currentPatternRight);
				nextPattern.add(currentPatternRight);
			}
			currentPattern = String2Pattern(current);
			String currentPatternUp = pattern2String(exchange(currentPattern, GO_UP));
			
			if(!map.contains(currentPatternUp)) {
				count.add(path+"2");
				map.add(currentPatternUp);
				nextPattern.add(currentPatternUp);
			}
			currentPattern = String2Pattern(current);
			String currentPatternDown = pattern2String(exchange(currentPattern, GO_DOWN));
			
			if(!map.contains(currentPatternDown)) {
				count.add(path+"3");
				map.add(currentPatternDown);
				nextPattern.add(currentPatternDown);
			}
			
		}
		
		return path;
		
	}