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

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

#define maxN 20

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

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;
 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++)
		if (F[ Sp[NewP[i][0]][j] ][ NewP[i][1]-1 ]==-1) {
		  OldP[++oldc][0]=Sp[NewP[i][0]][j];
		  OldP[oldc][1]=NewP[i][1]-1; }
	if (NewP[i][0]>2)
	   for (j=1;j<=Sp[NewP[i][1]][0];j++)
		if (F[ NewP[i][0]-1 ][ Sp[NewP[i][1]][j] ]==-1) {
		  OldP[++oldc][0]=NewP[i][0]-1;
		  OldP[oldc][1]=Sp[NewP[i][1]][j]; } }
    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]; } }
 flag=0;
 while (1) {
    getnum(&x,&y);
    flag=0;
    for (i=2;i<=maxN&&!flag;i++)
	for (j=2;j<=maxN&&!flag;j++) {
	   if (Nod(i,x)!=1&&i<x&&j==y+1) flag=1;
	   if (i==x+1&&j<y&&Nod(j,y)!=1) flag=1; }
    i--;j--;
    setnum(i,j); }
 return 0;
}

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