{
TASK:crazy
LANG:Pascal
}
program crazy;

uses
	module;

const
	MAXN				= 500;

type
	Integer				= LongInt;

var
	F				: Array [1 .. MAXN * 2, 1 .. MAXN * 2] of Boolean;
	done				: Array [1 .. MAXN * 2, 1 .. MAXN * 2] of Boolean;
	x, y, i, j, k			: Integer;
	prime				: Array [1 .. MAXN * 2] of Boolean;
	found				: Boolean;

function nod(a, b: Integer): Integer;
begin
	while (a <> b) do begin
		if (a > b) then
			a := a - b
		else
			b := b - a;
	end;
	nod := a;
end;

begin
	for i := 1 to MAXN * 2 do
		for j := 1 to MAXN * 2 do begin
			F[i, j] := True;
			done[i, j] := False;
		end;
	prime[1] := False;
	for i := 2 to MAXN * 2 do
		prime[i] := True;
	for i := 1 to MAXN * 2 do
		if (prime[i]) then begin
			j := i + i;
			while (j <= MAXN * 2) do begin
				prime[j] := False;
				j := j + i;
			end;
		end;
	prime[1] := True;
	for i := 1 to (MAXN * 2 - 1) do
		for j := (i + 1) to MAXN * 2 do
			if (prime[i]) and (prime[j]) then begin
				F[i, j] := False;
				F[j, i] := False;
				done[i, j] := True;
				done[j, i] := True;
			end;
	for i := 1 to MAXN * 2 do
		if (not prime[i]) then
			for j := 0 to MAXN * 2 - 1 do
				if (prime[j + 1]) then begin
					F[i, j + 1] := True;
					F[j + 1, i] := True;
					done[i, j + 1] := True;
					done[j + 1, i] := True;
				end;
	getnum(x, y);
	if (prime[x + 1]) then begin
		i := 2;
		while (y mod i <> 0) or (not prime[i]) do
			i := i + 1;
		setnum(x + 1, i);
	end else if (prime[y + 1]) then begin
		i := 2;
		while (x mod i <> 0) or (not prime[i]) do
			i := i + 1;
		setnum(i, y + 1);
	end else begin
		while (not prime[x + 1]) and (not prime[y + 1]) do begin
			found := False;
			for k := 2 to (x - 1) do begin
				j := nod(k, x);
				if (j <> 1) and (not F[j, y + 1]) then begin
					found := True;
					setnum(j, y + 1);
					break;
				end;
			end;
			if (found) then
				continue
			else
				for k := 2 to (y - 1) do begin
					j := nod(k, y);
					if (j <> 1) and (not F[x + 1, j]) then begin
						found := True;
						setnum(x + 1, j);
						break;
					end;
				end;
			if (not found) then begin
				if (x > y) then begin
					j := 2;
					while (not prime[j]) or (x mod j <> 0) do
						j := j + 1;
					j := j * 2;
					setnum(j, y + 1);
				end else begin
					j := 2;
					while (not prime[j]) or (y mod j <> 0) do
						j := j + 1;
					j := j * 2;
					setnum(x + 1, j);
				end;
			end;
			getnum(x, y);
		end;
		if (prime[x + 1]) then begin
			i := 2;
			while (y mod i <> 0) or (not prime[i]) do
				i := i + 1;
			setnum(x + 1, i);
		end else if (prime[y + 1]) then begin
			i := 2;
			while (x mod i <> 0) or (not prime[i]) do
				i := i + 1;
			setnum(i, y + 1);
		end;	
	end;
end.
