/*
TASK: crazy
LANG: C
*/
#include <stdio.h>
#include "module.h"

#define MAX 1200

#define FIRST 0
#define SECOND 1
#define UNDEF 0

int dc[MAX];
short dels[MAX][MAX];
int t[MAX][MAX];
short nextn[MAX][MAX];
short nextw[MAX][MAX];

int soln(short x,short y) {
int res = -1;
int i,p;
char win=0;
int max=0,min=-200000000,maxn = -2000000000;
char maxw;
    if (t[x][y]!=UNDEF) return t[x][y];
    for (i=0;i<dc[x];i++) {
        p = soln(dels[x][i],y+1);
        if (p<0) {
           if (p>min) {
              min = p;
              nextn[x][y] = dels[x][i];
              nextw[x][y] = FIRST;
           }
           win = 1;
        } else {
           if (p>max) {
              max = p;
              maxn = dels[x][i];
              maxw = FIRST;
           }
        }
    }
    for (i=0;i<dc[y];i++) {
        p = soln(x+1,dels[y][i]);
        if (p<0) {
           if (p>min) {
              min = p;
              nextn[x][y] = dels[y][i];
              nextw[x][y] = SECOND;
           }
           win = 1;
        } else {
           if (p>max) {
              max = p;
              maxn = dels[y][i];
              maxw = SECOND;
           }
        }
    }
    
    if (win) {
       return t[x][y] = abs(min)+1;
    } else {
       nextn[x][y] = maxn;
       nextw[x][y] = maxw;
       return t[x][y] = -(max+1);
    }
}

int nod(int a,int b) {
    if (b==0) return a;
    else return nod(b,a%b);
}

int main () {
int i,j;
int best=-1;
long x,y,nx,ny;
    for (i=2;i<=1000;i++) {
        for (j=2;j<i;j++)
            if (nod(i,j)>1)
               dels[i][dc[i]++] = j;
        if (dc[i]>best)
           best = dc[i];
    }
    getnum(&x,&y);
    soln(x,y);
    while (1) {
          if (nextw[x][y]==FIRST) {
             setnum(nextn[x][y],y+1);
             nx = nextn[x][y];
             ny = y+1;
          } else {
             setnum(x+1,nextn[x][y]);
             nx = x+1;
             ny = nextn[x][y];
          }
          x = nx;
          y = ny;
          getnum(&x,&y);
    }
    return 0;
}
