/*
PROG: pprime
LANG: C
*/

#include
<stdio.h>
#include
<string.h>
#define max 1000000
char s[max];
int P[max], k = 0;
void setPrime()
{
    
int i, j, a, b = max / 2;
    
for (i = 2; i < b; i++)
    
{
        
if (!s[i])
        
{
            
for (j = 2; (a = i * j) < max; j++)
            
{
                s[a] 
= 1;
            }

        }

    }
 
}

void set()
{
    
int i;
    
for (i = 2; i < 10000; i++)
    
{
        
if (s[i] == 0)
        
{
            P[k
++= i;
        }

    }

}

int IsPrime(int n)
{
    
int i, j;
    
for (i = 0; i < k; i++)
    
{
        
if (n % P[i] == 0)
        
{
            
return 0;
        }

    }

    
return 1;
}

int IsPPrime(int n)
{
    
int i = 0, j;
    
int s1[11]; 
    
if (n < 10 || n == 11)
    
{
        
return 1;
    }

    
while (n)
    
{
        s1[i
++= n % 10 ;
        n 
= n / 10;
    }

    
if (i % 2 == 0)
    
{
        
return  0;
    }

    
for (j = 0; j < i / 2; j++)
    
{
        
if (s1[j] != s1[i - j - 1])
        
{
            
return 0;
        }

    }

    
return 1;
}


int main()
{
    FILE 
* fin = fopen("pprime.in""r");
    FILE 
* fout = fopen("pprime.out""w");
    
int i, a, b;
    
    fscanf( fin, 
"%d%d"&a, &b);
    
if (b > 10000000)
    
{
        b 
= 10000000;
    }

    setPrime();
    
set();
    
for (i = a; i <= b; i++)
    
{
        
if (i < max)
        
{
            
if ( s[i] == 0 && IsPPrime(i))
            
{
                fprintf(fout, 
"%d\n", i);
            }

        }

        
else
        
{
            
//因为这里是大数,所以用IsPrime()判断每一个数会超时,判回文反而较快。
            
//而对于这么多大数,用基本的去合数方法,先过滤掉些较直观的合数,这样速度就出来了。 
            if ( i % 2 != 0 && i % 3 != 0 && i % 5 != 0&& IsPPrime(i)&&IsPrime(i) )
            
{
                fprintf(fout, 
"%d\n", i);
            }

        }

    }

    
return 0;
}