/*
TASK:crazy
LANG:C
*/

#include <stdio.h>
#include "module.h"
char table[500][500];
int x1[500][500];
int y1[500][500];
int p[500][500];
short a[500][500];
int gcd(int a,int b)
{
 if(a<b)
        return gcd(b,a);
 if(b==0)
         return a;
 return gcd(b,a%b);
}

void precompute()
{
 int i,p,j;
 for(i=2;i<=500;i++)
 {
  for(p=0,j=2;j<i;j++)
     if(gcd(i,j)!=1)
        a[i][p++]=j;
 }
}

#define PRIME(u) (0==a[u][0])
#define LOSE -1
#define WIN 1

int f(int x,int y)
{
 int r=LOSE,bx,by,bp=0xfffff,i;
 if(x<y)
 {
  r=f(y,x);
  x1[x][y]=y1[y][x];
  y1[x][y]=x1[y][x];
  p[x][y]=p[y][x];
  return r;
 }
 if(table[x][y])
    return table[x][y];
 if(PRIME(x) && PRIME(y))
 {
    x1[x][y]=-1;
    y1[x][y]=-1;
    p[x][y]=0;
    return table[x][y]=LOSE;
 }
 for(i=0;a[x][i]!=0;i++)
    if(f(a[x][i],y+1)==LOSE && p[a[x][i]][y+1]<bp)
    {
     r=WIN;
     bp=p[a[x][i]][y+1];
     bx=a[x][i];
     by=y+1;
    }

 for(i=0;a[y][i]!=0;i++)
    if(f(x+1,a[y][i])==LOSE && p[x+1][a[y][i]]<bp)
    {
     r=WIN;
     bp=p[x+1][a[y][i]];
     bx=x+1;
     by=a[y][i];
    }

 x1[x][y]=bx;
 y1[x][y]=by;
 p[x][y]=bp+1;
 if(p[x][y]<0);
               p[x][y]=0;
 return table[x][y]=r;

}
int main()
{
 long x,y,u,v;
 precompute();
 do
 {
  getnum(&x,&y);
//  printf("get: %d %d \n",x,y);
  f(x,y);
  u=x1[x][y];
  v=y1[x][y];
//  printf("set: %d %d \n",u,v);
  setnum(u,v);
 } while(!(PRIME(u)&& PRIME(v)));

 return 0;
}
