program solitario;
uses Math;
var N,M,i,j, soluzione, con_x, senza_x, nuovariga, nuovacolonna:longint;
griglia:array[-1..12,-1..12] of longint;
function posso(r, c: longint): boolean;
begin
(*tris orizzontale*)
if (c-2>0) and (griglia[r][c-2]=1) and (griglia[r][c-1]=1) then posso:=false
(*tris orizzontale*)
else if (r-2>0) and (griglia[r-2][c]=1) and (griglia[r-1][c]=1) then posso:=false
(* Tris diagonale in alto a sx*)
else if (r-2>0 ) and (c-2>0) and (griglia[r-2][c-2]=1) and (griglia[r-1][c-1]=1) then posso:=false
(* Tris diagonale in alto a dx*)
else if (r-2>0) and (c+2<M) and (griglia[r-2][c+2]=1) and (griglia[r-1][c+1]=1) then posso:=false
else posso := true;
end;
function gioca (riga, colonna:longint):longint;
begin
if riga>N then exit;
if griglia[riga][colonna]<>-1 then gioca:=griglia[riga][colonna];
if colonna+1=M then nuovariga:=riga+1
else nuovariga:=riga;
nuovacolonna:= (colonna+1 ) mod M;
senza_x:= gioca(nuovariga, nuovacolonna);
con_x:=0;
(*Se posso, metto la X*)
if posso (riga,colonna)=true then begin
if colonna+1=M then nuovariga:=riga+1
else nuovariga:=riga;
nuovacolonna:= (colonna+1 ) mod M;
con_x:=1+gioca(nuovariga, nuovacolonna);
griglia[riga, colonna]:=-1;
end;
(*Ritorno la soluzione migliore*)
griglia[riga, colonna]:= max(con_x,senza_x);
gioca:=griglia[riga, colonna];
end;
begin
readln(N,M);
for i:=0 to N do
for j:=01 to M do griglia[i,j]:=-1;
writeln(gioca(1,1));
for i:=1 to N do begin
for j:=1 to M do write(griglia[i,j],' '); writeln; end;
end.
cHJvZ3JhbSBzb2xpdGFyaW87CnVzZXMgTWF0aDsKdmFyIE4sTSxpLGosIHNvbHV6aW9uZSwgY29uX3gsIHNlbnphX3gsIG51b3ZhcmlnYSwgbnVvdmFjb2xvbm5hOmxvbmdpbnQ7CiAgICBncmlnbGlhOmFycmF5Wy0xLi4xMiwtMS4uMTJdIG9mIGxvbmdpbnQ7CgpmdW5jdGlvbiBwb3NzbyhyLCBjOiBsb25naW50KTogYm9vbGVhbjsKYmVnaW4KICAgICAgKCp0cmlzIG9yaXp6b250YWxlKikKICAgaWYgKGMtMj4wKSBhbmQgKGdyaWdsaWFbcl1bYy0yXT0xKSBhbmQgKGdyaWdsaWFbcl1bYy0xXT0xKSB0aGVuIHBvc3NvOj1mYWxzZQogICAgICAoKnRyaXMgb3JpenpvbnRhbGUqKQogICAgICBlbHNlICBpZiAoci0yPjApIGFuZCAoZ3JpZ2xpYVtyLTJdW2NdPTEpIGFuZCAoZ3JpZ2xpYVtyLTFdW2NdPTEpIHRoZW4gcG9zc286PWZhbHNlCiAgICAoKiBUcmlzIGRpYWdvbmFsZSBpbiBhbHRvIGEgc3gqKQogICAgICBlbHNlIGlmIChyLTI+MCApIGFuZCAoYy0yPjApIGFuZCAoZ3JpZ2xpYVtyLTJdW2MtMl09MSkgYW5kIChncmlnbGlhW3ItMV1bYy0xXT0xKSB0aGVuIHBvc3NvOj1mYWxzZQogICAgKCogVHJpcyBkaWFnb25hbGUgaW4gYWx0byBhIGR4KikKICAgICAgZWxzZSBpZiAoci0yPjApIGFuZCAoYysyPE0pIGFuZCAoZ3JpZ2xpYVtyLTJdW2MrMl09MSkgYW5kIChncmlnbGlhW3ItMV1bYysxXT0xKSB0aGVuIHBvc3NvOj1mYWxzZQogICAgICAgICAgZWxzZSAgIHBvc3NvIDo9IHRydWU7CmVuZDsgICAgCmZ1bmN0aW9uIGdpb2NhIChyaWdhLCBjb2xvbm5hOmxvbmdpbnQpOmxvbmdpbnQ7CiAgYmVnaW4KICAgaWYgcmlnYT5OIHRoZW4gZXhpdDsKICAgaWYgZ3JpZ2xpYVtyaWdhXVtjb2xvbm5hXTw+LTEgdGhlbiBnaW9jYTo9Z3JpZ2xpYVtyaWdhXVtjb2xvbm5hXTsKICAgaWYgY29sb25uYSsxPU0gdGhlbiBudW92YXJpZ2E6PXJpZ2ErMQogICAgICAgICAgICAgICAgICBlbHNlIG51b3ZhcmlnYTo9cmlnYTsKICAgIG51b3ZhY29sb25uYTo9IChjb2xvbm5hKzEgKSBtb2QgTTsgCiAgICBzZW56YV94Oj0gZ2lvY2EobnVvdmFyaWdhLCBudW92YWNvbG9ubmEpOwogICAgY29uX3g6PTA7CiAgICAgICAgICAgICAgICAgICAoKlNlIHBvc3NvLCBtZXR0byBsYSBYKikKICAgIGlmIHBvc3NvIChyaWdhLGNvbG9ubmEpPXRydWUgdGhlbiBiZWdpbiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjb2xvbm5hKzE9TSB0aGVuIG51b3ZhcmlnYTo9cmlnYSsxCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBudW92YXJpZ2E6PXJpZ2E7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVvdmFjb2xvbm5hOj0gKGNvbG9ubmErMSApIG1vZCBNOyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25feDo9MStnaW9jYShudW92YXJpZ2EsIG51b3ZhY29sb25uYSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZ2xpYVtyaWdhLCBjb2xvbm5hXTo9LTE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ7CiAgICAgICAgICAgICAgICAgICAoKlJpdG9ybm8gbGEgc29sdXppb25lIG1pZ2xpb3JlKikKICAgIGdyaWdsaWFbcmlnYSwgY29sb25uYV06PSBtYXgoY29uX3gsc2VuemFfeCk7CiAgICBnaW9jYTo9Z3JpZ2xpYVtyaWdhLCBjb2xvbm5hXTsKZW5kOwpiZWdpbgoJcmVhZGxuKE4sTSk7Cglmb3IgaTo9MCB0byBOIGRvCgkgICAgICAgICAgICBmb3Igajo9MDEgdG8gTSBkbyBncmlnbGlhW2ksal06PS0xOwogICAgICAgICAKCXdyaXRlbG4oZ2lvY2EoMSwxKSk7CgkKCWZvciBpOj0xIHRvIE4gZG8gYmVnaW4KCSAgICAgICAgICAgIGZvciBqOj0xIHRvIE0gZG8gd3JpdGUoZ3JpZ2xpYVtpLGpdLCcgJyk7IHdyaXRlbG47IGVuZDsKZW5kLgo=