/*
TASK:crazy
LANG:C
*/

#include <stdio.h>
#include <math.h>
#include "module.h"

int P[2000], rx, ry;
int D[600][1000], bestl;

int nod(int a, int b)
{
  int t;
  if (a < b) a ^= b, b ^= a, a ^= b;
  while (b)
  {
    t = a%b;
    a = b;
    b = t;
  }
  return a;
}

int SD[1000][2], nd;
int U[1000], curdiv;

void recdiv(int a, int c)
{
  int i;
  if (c == nd)
  {
    D[curdiv][++D[curdiv][0]] = a;
  }
  else for (i=0; i<=SD[c][1]; i++)
    recdiv(a, c+1), a *= SD[c][0];
}

int divs(int a)
{
  int i;
  int lSD[1000]={0};
  for (i=2; a != 1;)
    if (!(a%i)) lSD[i]++, a /= i;
    else i++;
  memset(SD, 0, 1000*2*4);
  nd = 0;
  for (i=2; i<1000; i++)
    if (lSD[i]) SD[nd][0] = i, SD[nd++][1] = lSD[i];
  recdiv(1, 0);
}

int histurn(int, int, int, int*);

int yourturn(int x, int y, int l, int *lastl)
{
  int i, r=0;
  
  if (P[x] && P[y]) {/* *lastl = (l < *lastl) ? l : *lastl;*/ return 0; }
  if (!P[x] && P[y+1]) { rx = D[x][2]; ry = y+1; *lastl = (l < *lastl) ? l : *lastl; return 1; }
  if (P[x+1] && !P[y]) { rx = x+1; ry = D[y][2]; *lastl = (l < *lastl) ? l : *lastl; return 1; }
  
  for (i=1; i<D[x][0]-1; i++)
    if (!histurn(D[x][i+1], y+1, l+1, lastl))
      if (*lastl <= bestl) bestl = *lastl, rx = D[x][i+1], ry = y+1, r=1;
  for (i=1; i<D[y][0]-1; i++)
    if (!histurn(x+1, D[y][i+1], l+1, lastl))
      if (*lastl <= bestl) bestl = *lastl, rx = x+1, ry = D[y][i+1], r=1;

  return r;
}

int histurn(int x, int y, int l, int *lastl)
{
  int i, r=1, a;
  
  if (P[x] && P[y]) { *lastl = (l < *lastl) ? l : *lastl; return 0; }
  if (!P[x] && P[y+1]) { return 1; }
  if (P[x+1] && !P[y]) { return 1; }
  
  for (i=1; i<D[x][0]-1; i++)
    r &= !yourturn(D[x][i+1], y+1, l+1, lastl);
  for (i=1; i<D[y][0]-1; i++)
    r &= !yourturn(x+1, D[y][i+1], l+1, lastl);

  return r;
}
              /*
void getnum(long *a, long *b)
{
  *a = 2;
  *b = 6;
}

void setnum(long a, long b)
{
  printf("%d %d\n", a, b);
  exit(0);
}           */

int main()
{
  long x, y, i, j;
  int d=0;

  for (i=2; i<2000; i++) P[i] = 1;
  for (i=2; i<2000; i++)
    if (P[i])
      for (j=i*2; j<2000; j+=i) P[j] = 0;

  for (curdiv=2; curdiv<600; curdiv++)
    divs(curdiv);


  do
  {
    d = 0;
    bestl = 0x7fffffff;
    getnum(&x, &y);
    yourturn(x, y, 0, &d);
    setnum(rx, ry);
    
  } while (1);

  return 0;
}

                                                                                                        
