#include<stdio.h>
#include<math.h>
#define max 10001 //素数表范围
int flag[max+1]; //标志一个数是否为素数
int prime[max+1]; //素数表,下标从0开始
int size; //素数个数
void main()
{
int i,j,size=0,M,sum,min,a[2],s;
for(i=2;i<=max;i++) //将偶数标志为0,奇数标志为1
{
if(i%2==0)
flag[i]=0;
else
flag[i]=1;
}
for(i = 2; i <= max / 2; i++)
{
if(flag[i]==1)
{
for( j = 2*i ; j <= max; j += i) //将已知的素数的倍数标志为0
{
flag[j] = 0;
}
}
}
for( i = 2 ; i <= max; i++)
{
if(flag[i]==1)
{
prime[size++] = i; //搜索标志为1 的数就是素数,将素数存入prime数组中间
}
}
/* for(i=0;i<size;i++)
printf("%d ",prime[i]);*/
while(scanf("%d",&M)!=EOF)
{
sum=0;
min=M; //将最小值赋值为M
for(i=0;i<size;i++)
{
for(j=0;j<size;j++)
{
sum=prime[i]+prime[j]; //搜索和为M的两个素数
if(sum==M)
{
s=abs(prime[i]-prime[j]); //找出数之差最小的两个素数
if(s<min)
{
min=s;
if(prime[i]>prime[j]) //按从小到大输出
{
a[0]=prime[j];
a[1]=prime[i];
}
else
{
a[0]=prime[i];
a[1]=prime[j];
}
}
}
if(sum>M) break; //两数之和大于M则跳出循环
}
}
printf("%d %d\n",a[0],a[1]); //用数组a存储两个素数的值
}
}