/*
TASK:crazy
LANG:C++
*/

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

#define maxN 11

typedef struct node *link;
struct node { link next;int x1,y1; };
typedef link Node;

long x,y;
int Sp[maxN][maxN],F[maxN][maxN],cnt,Flags[maxN];
link A[maxN+1][maxN+1];
int NewP[maxN*maxN][2],OldP[maxN*maxN][2],oldc=0;
int Nod(int fst,int snd);

int main()
{
 int i,j;
 for (i=2;i<=maxN;i++)
    for (j=i+1;j<=maxN;j++)
       if (Nod(i,j)!=1) {
	  Sp[i][++Sp[i][0]]=j;
	  Flags[j]=1; }
 for (i=2;i<maxN;i++)
    for (j=2;j<maxN;j++)
	if (!Flags[i]&&!Flags[j]) {
	   F[i][j]=0;
	   NewP[++cnt][0]=i;
	   NewP[cnt][1]=j; }
	  else F[i][j]=-1;
 int flag=0;
 link z;
 while (cnt) {
    oldc=0;
    for (i=1;i<=cnt;i++) {
	if (NewP[i][1]>2)
	   for (j=1;j<=Sp[NewP[i][0]][0];j++) {
		  OldP[++oldc][0]=Sp[NewP[i][0]][j];
		  OldP[oldc][1]=NewP[i][1]-1;
		  z=(node*)malloc(sizeof*z);
		  z->next=A[ OldP[oldc][0] ][ OldP[oldc][1] ];
		  z->x1=NewP[i][0];
		  z->y1=NewP[i][1];
		  A[ OldP[oldc][0] ][ OldP[oldc][1] ]=z; }
	if (NewP[i][0]>2)
	   for (j=1;j<=Sp[NewP[i][1]][0];j++) {
		  OldP[++oldc][0]=NewP[i][0]-1;
		  OldP[oldc][1]=Sp[NewP[i][1]][j];
		  z=(node*)malloc(sizeof*z);
		  z->next=A[ OldP[oldc][0] ][ OldP[oldc][1] ];
		  z->x1=NewP[i][0];
		  z->y1=NewP[i][1];
		  A[ OldP[oldc][0] ][ OldP[oldc][1] ]=z; } }
    if (!flag) flag=1; else flag=0;
    for (i=1;i<=oldc;i++)
	F[OldP[i][0]][OldP[i][1]]=flag;
    for (cnt=oldc,i=1;i<=cnt;i++) {
	NewP[i][0]=OldP[i][0];
	NewP[i][1]=OldP[i][1]; } }
 while (1) {
    getnum(&x,&y);
    for (z=A[x][y];z!=NULL&&F[z->x1][z->y1];z=z->next);
    setnum(z->x1,z->y1); }
 return 0;
}

int Nod(int fst,int snd)
{
 while (fst!=snd)
     if (fst>snd) fst-=snd; else snd-=fst;
 return fst;
}
