#include <iostream.h>
#include <stdio.h>

int primes[62] 
 = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 
   31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 
   73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 
   127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 
   179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 
   233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 
   283, 293};
int bowls[22];
int scores[10];
int sums[10];

bool isprime (int n) {
  for (int lcv=0;lcv<62;lcv++)
    if (primes[lcv]==n) return true;
  return false;
}

void comput(int wch) {
  int st = wch*2;
  scores[wch] = bowls[st]+bowls[st+1];
  if (bowls[st] == 10) {
    scores[wch] += bowls[st+2] + bowls[st+3];
    if ((bowls[st+2] == 10) && (wch != 9))
      scores[wch] += bowls[st+4];
  } else if (scores[wch] == 10) {
    scores[wch] += bowls[st+2];
  }
  if (wch==0) sums[wch] = scores[wch];
  else sums[wch] = scores[wch] + sums[wch-1];
}

void print(void) {
 if (sums[9] > 200) {
  cout << "\n";
  
  cout << " 1   2   3   4   5   6   7   8   9   10\n";
  for (int lcv=0;lcv<10;lcv++) {
    if (bowls[lcv*2] == 10) cout << " X  ";
    else {
      cout << bowls[lcv*2] << " ";
      if (bowls[lcv*2] + bowls[lcv*2+1] == 10) cout << "/ ";
      else if (bowls[lcv*2+1] == 0) cout << "- ";
      else cout << bowls[lcv*2+1] << " ";
    }
  }
  if (bowls[18] == 10) {
    if (bowls[20] == 10) cout << "X ";
    else cout << bowls[20] << " ";
    if ((bowls[21] == 10) && (bowls[20]==10)) cout << "X ";
    else if ((bowls[20] + bowls[21] == 10) && (bowls[20]!=10)) cout << "/ ";
    else cout << bowls[21] << " ";
  } else if (bowls[18]+bowls[19] == 10) {
    if (bowls[20] == 10) cout << "X ";
    else cout << bowls[20] << " ";
  }
  cout << "\n";
  for (int lcv=0;lcv<10;lcv++) 
    printf("%3d ",sums[lcv]);
  cout << "\n";
 }
}

void recurse(int bow) {
  if (bow == 22) {
    comput(9);
    if (isprime(sums[9])) print();
  } else {
    if (bow==20) {
      if (bowls[18]+bowls[19] != 10) {
        bowls[bow]= -1;
        comput(9);
        if (isprime(sums[9])) print();
      } else bowls[bow]= 10;
    } else if (bow==21) {
      if (bowls[18] != 10) {
        bowls[bow] = -1;
        comput(9);
        if (isprime(sums[9])) print();
      }
      else if (bowls[20] != 10) bowls[bow] = 10 - bowls[20];
      else bowls[bow]=10;
    } else if (bow%2==1) bowls[bow] = 10-bowls[bow-1];
    else bowls[bow] = 10;
    while (bowls[bow] >= 0) {
      if ((bow%2==1) && (bow>4)) {
        comput(bow/2-2);
        if (isprime(sums[bow/2-2])) recurse(bow+1);
      } else {
        recurse(bow+1);
      }
      bowls[bow]--;
    }
  }
}

void main (void) {
  recurse(0);
}
