#include <stdio.h>#include <string.h>int pnum;int prime[30000],lr[1000001];bool isprime(int n){ if(n==1) return false; for(int i=0;i<pnum&′[i]*prime[i]<=n;i++) if(n%prime[i]==0) return false; return true;}void getprime(){ prime[0]=2; prime[1]=3; pnum=2; for(int i=5;i<48000;i++) { if(isprime(i)) prime[pnum++]=i; }}void slove(int l,int r){ memset(lr,0,sizeof(lr)); for(int i=0;i<pnum;i++) { int s=(l-1)/prime[i]+1; int t=r/prime[i]; for(int j=s;j<=t;j++) { if(j>1) lr[j*prime[i]-l]=1; } } if(l==1) lr[0]=1; int k=-1,maxn=-1,minn=99999999; long long upx=0,upy=0,downx=0,downy=0; for(int i=0;i<=r-l;i++) { if(lr[i]==0) { if(k==-1) { k=i; } else { if(i-k<minn) { minn=i-k; upx=k; upy=i; } if(i-k>maxn) { maxn=i-k; downx=k; downy=i; } k=i; } } } if(maxn==-1) printf("There are no adjacent primes.n"); else printf("%lld,%lld are closest, %lld,%lld are most distant.n",upx+l,upy+l,downx+l,downy+l);}int main(){ getprime(); int L,U; while(scanf("%d %d",&L,&U)!=EOF) { slove(L,U); } return 0;}