#include <stdlib.h>
#include <stdio.h>
int lprime(int n) {
int max = -1;
if (n < 2) return n;
while (n % 2 == 0) {
max = 2;
n /= 2;
}
for (int i = 3; i*i <= n; i += 2) {
while (n % i == 0) {
max = i;
n = n / i;
}
}
if (n > 2) {
max = n;
}
return max;
}
int unus(int n) {
int factor = lprime(n);
return (factor * factor > n);
}
int del(int num, int n)
{
int revnew = 0;
int new = 0;
int d = 0;
for (int i = 0; num != 0; i++) {
if (i != n) {
revnew = (revnew * 10) + num % 10;
d++;
}
num = num / 10;
}
while (d--) {
new = new * 10 + revnew % 10;
revnew = revnew / 10;
}
return new;
}
int dlog(int m) {
if (m < 10) return 0;
if (m < 100) return 1;
if (m < 1000) return 2;
if (m < 10000) return 3;
if (m < 100000) return 4;
if (m < 1000000) return 5;
if (m < 10000000) return 6;
if (m < 100000000) return 7;
if (m < 1000000000) return 8;
return 9;
}
int is_superunusual(int m)
{
int d = dlog(m) + 1;
if (unus(m) == 0) return 0;
for (int i = 0; i < d; i++) {
int nmin = del(m, i);
if (unus(nmin) == 0) return 0;
}
return 1;
}
int nth_su(int n)
{
int m = 10;
int counter = 0;
while (counter < n) {
if (is_superunusual(m++)) {
counter++;
printf("%d: %d\n", counter
, m
- 1); }
}
return m - 1;
}
int main(void)
{
nth_su(100);
return 0;
}