Problem:
Twin Prime

Prime numbers are widely applied for cryptographic and communication technology.
A twin prime is a prime number that differs from another prime number by 2.
For example, (5, 7) and (11, 13) are twin prime pairs.

In this problem, we call the greater number of a twin prime "size of the twin prime."

Your task is to create a program which reads an integer n and prints a twin prime which has the maximum size among twin primes less than or equals to n

You may assume that 5 ≤ n ≤ 10000.

Input

The input is a sequence of datasets. The end of the input is indicated by a line containing one zero. Each dataset is formatted as follows:

n (integer)

Output

For each dataset, print the twin prime p and q (p < q). p and q should be separated by a single space.

Sample Input

12
100
200
300
0

Output for the Sample Input

5 7
71 73
197 199
281 283

Solution in JAVA (judge verdict: Wrong Answer)

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

public class Main {

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		List<Integer> primeList = getPrimeNum(10000);
		int limit;
		while((limit = Integer.parseInt(br.readLine())) != 0){
			System.out.println(getMaxTwinPrime(primeList,getLimitIndex(limit,primeList)));
		}
	}
	
	private static int getLimitIndex(int limit,List<Integer> primeList){
		int limitIndex;
		if((limitIndex = primeList.indexOf(limit)) != -1){
			return  limitIndex;
		}else{
			for(int i = 0 ; i < primeList.size() ; i++){
				if(primeList.get(i) > limit){
					return i - 1;
				}
			}
		}
		return -1;
	}
	
	private static String getMaxTwinPrime(List<Integer> primeList,int limitIndex){
		for(int i = limitIndex ; 0 < i ; i--){
			for(int y = i - 1 ; 0 <= y ; y--){
				if(primeList.get(i) - primeList.get(y) == 2){
					return primeList.get(y) + " " + primeList.get(i);
				}else if(primeList.get(i) - primeList.get(y) < 2){
					continue;
				}else{
					break;
				}
			}
		}
		return null;
	} 
	
	private static List<Integer> getPrimeNum(int limit){
		List<Integer> primeList = new ArrayList<>();
		primeList.add(2);
		for(int i = 3 ; i <= limit ; i += 2){
			boolean primeFlag = true;
			for(int y = 2 ; y < i ; y++){
				if(i % y == 0){
					primeFlag = false;
					break;
				}
			}
			if(primeFlag){
				primeList.add(i);
			}
		}
		return primeList;
	}

}