/*
PROG: sprime
LANG: C
*/

#include
<stdio.h>
#define max 100000
FILE 
* fin;
FILE 
* fout;
char s[max];
int p[max];
int k;
void setPrime()
{
    
int i, j, c, t = max / 2;
    k 
= 0;
    s[
1= 1;
    
for (i = 2; i < t; i++)
    
{
        
if (!s[i])
        
{
            p[k
++= i;
            
for (j = 2; (c = i * j) < max; j++)
            
{
                s[c] 
= 1;                
            }
            
        }

    }

}

int IsPrime(int n)
{
    
int j, c;
    
if (n < max)
    
{
        
if (s[n])
        
{
            
return 0;
        }

        
return 1;
    }

    
else
    
{
        
for (j = 0; j < k; j++)
        
{
            
if (n % p[j] == 0)
            
{
                
return 0;
            }

        }
 
        
return 1;
    }
            
}

void Dfs(int depth, int n, int m)
{
    depth
++;
    
if (IsPrime(m))
    
{
        
if (depth == n)
        
{
            fprintf(fout, 
"%d\n", m);
        }

        
else
        
{
            m 
*= 10;
            Dfs(depth, n, m 
+ 1);
            Dfs(depth, n, m 
+ 3);        
            Dfs(depth, n, m 
+ 7);
            Dfs(depth, n, m 
+ 9);
        }

    }

}


int main()
{
    fin 
= fopen("sprime.in""r");
    fout 
= fopen("sprime.out""w");
    
int n, i;
    setPrime();
    fscanf(fin, 
"%d"&n);
    Dfs(
0, n, 2);
    Dfs(
0, n, 3);
    Dfs(
0, n, 5);
    Dfs(
0, n, 7);
    
return 0;
}