Problem:
問題 3

　入力ファイルの１行目に正整数 n （n≧3）が書いてあり，
つづく n 行に異なる正整数 a1, ..., an が
１つずつ書いてある．
a1, ..., an から異なる２個を選んで作られる
順列を（数として見て）小さい順に並べたとき，
３番目に来るものを出力せよ．

　ただし，
例えば，a1 = 1，a4 = 11 のような場合も，
a1a4 と a4a1 は異なる順列とみなす．
また，
1≦ai≦10000 (i=1, ..., n) かつ 3≦n≦104 である．

出力ファイルにおいては，
出力の最後にも改行コードを入れること．

入出力例

入力例１

3
2
7
5

出力例１

52

入力例２

4
17
888
1
71

出力例２

171

問題文と自動審判に使われるデータは、情報オリンピック日本委員会が作成し公開している問題文と採点用テストデータです。

Solution in JAVA (judge verdict: Accepted)

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Map;
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;

public class Main {
	
	public static class Conp{
		int start_pos, end_pos;
		boolean inv;

		public Conp(int s, int e) {
			super();
			this.start_pos = s;
			this.end_pos = e;
			inv = false;
		}
		
		public Conp(int s, int e, boolean inv) {
			super();
			this.start_pos = s;
			this.end_pos = e;
			this.inv = inv;
		}
		
		public int connect(int[] array){
			return Integer.parseInt(array[start_pos] + "" + array[end_pos]);
		}
	}
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		final int n = sc.nextInt();
		
		int[] array = new int[n];
		
		for(int i = 0; i < n; i++){
			array[i] = sc.nextInt();
		}
		
		Arrays.sort(array);
		
		PriorityQueue<Integer> p_queue = new PriorityQueue<Integer>();
		
		Queue<Conp> queue = new LinkedList<Conp>();
		queue.add(new Conp(0, 1));
		
		int count = 0;
		while(!queue.isEmpty()){
			Conp conp = queue.poll();
			
			if(count > 1000){
				break;
			}else{
				count++;
			}
			
			p_queue.add(conp.connect(array));
			if(!conp.inv){
				if(conp.end_pos < array.length - 1 && conp.end_pos + 1 != conp.start_pos){
					queue.add(new Conp(conp.start_pos, conp.end_pos + 1));
				}
				if(conp.start_pos < array.length - 1 && conp.start_pos + 1 != conp.end_pos){
					queue.add(new Conp(conp.start_pos + 1, conp.end_pos));
				}
			
				queue.add(new Conp(conp.end_pos, conp.start_pos, true));
			}
		}
		
		//System.out.println(p_queue);
		
		p_queue.poll();
		p_queue.poll();
		System.out.println(p_queue.poll());
		
	}

}