package emirps;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
public class Emirps {
public LinkedList<Integer> listEmirps = new LinkedList<Integer>();
public Emirps(int valor) {
obtenerEmirps(valor);
}
public Boolean[] obtenerPrimos(int valor) {
Boolean arrayNum[] = new Boolean[valor + 1];
arrayNum[0] = false;
arrayNum[1] = true;
if (valor < 2) {
return arrayNum;
}
arrayNum[2] = true;
boolean siguienteValor = true;
for (int i = 3; i <= valor; i++) {
arrayNum[i] = siguienteValor;
siguienteValor = !siguienteValor;
}
for (int i = 3; i <= Math.sqrt(valor); i = i + 2) {
if (arrayNum[i] == true) {
for (int j = i * 2; j <= valor; j = j + i) {
arrayNum[j] = false;
}
}
}
return arrayNum;
}
public static boolean esPrimo(int numero) {
if (numero == 1 || numero == 2) {
return true;
}
if (numero == 0 || numero % 2 == 0) {
return false;
}
for (int i = 3; i <= Math.sqrt(numero); i = i + 2) {
if (numero % i == 0) {
return false;
}
}
return true;
}
public void obtenerEmirps(int valor) {
Boolean numPrimos[] = obtenerPrimos(valor);
for (int i = 10; i <= valor; i++) {
if (numPrimos[i]) {
int numReves = darVuelta(i);
if (numReves != i) {
if (numReves <= valor) {
if (numPrimos[numReves]) {
listEmirps.add(i);
}
} else if (esPrimo(numReves)) {
listEmirps.add(i);
}
}
}
}
}
public static int darVuelta(int numero) {
int aux = 0;
while (numero > 0) {
aux = aux * 10 + numero % 10;
numero /= 10;
}
return aux;
}
public static void main(String[] args) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
try {
while (br.ready()) {
int valor = 0;
String line = br.readLine();
line = line.trim();
Emirps emirps = new Emirps(Integer.parseInt(line));
while (!emirps.listEmirps.isEmpty()) {
valor += emirps.listEmirps.getFirst();
emirps.listEmirps.remove();
}
System.out.println(valor);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}