| 记录编号 | 
        19318 | 
        评测结果 | 
        AAAAATATTT | 
    
    
        | 题目名称 | 
        467.魔术数字游戏 | 
        最终得分 | 
        60 | 
            
    
    
        | 用户昵称 | 
         1102 | 
        是否通过 | 
        未通过 | 
    
    
        | 代码语言 | 
        Pascal | 
        运行时间 | 
        5.912 s  | 
    
    
        | 提交时间 | 
        2010-10-08 10:32:34 | 
        内存使用 | 
        0.11 MiB  | 
        
    
    
    
    		显示代码纯文本
		
		program xxxx;
var a:array[1..5,1..5] of integer;
    m,n,j,j1,z:integer;
    pd:array[2..16] of boolean;
function panduan(x,y,i:integer):boolean;
var p,m:integer;
begin
  m:=0;
  if a[x,y]<>1 then
    a[x,y]:=i;
  if y=4 then
    begin
      for p:=1 to 4 do
        m:=m+a[x,p];
      if m<>34 then
        begin
          panduan:=false;
          a[x,y]:=0;
          exit;
        end;
      m:=0;
    end;
  if x=4 then
    begin
      for p:=1 to 4 do
        m:=m+a[p,y];
      if m<>34 then
        begin
          panduan:=false;
          a[x,y]:=0;
          exit;
        end;
      m:=0;
    end;
  if (x mod 2=0)and(y mod 2=0) then
    if a[x,y]+a[x-1,y]+a[x,y-1]+a[x-1,y-1]<>34 then
      begin
        panduan:=false;
        a[x,y]:=0;
        exit;
      end;
  if (x=3)and(y=3) then
    if a[2,2]+a[3,3]+a[2,3]+a[3,2]<>34 then
      begin
        panduan:=false;
        a[x,y]:=0;
        exit;
      end;
  if (x=4)and(y=1) then
    if a[4,1]+a[3,2]+a[2,3]+a[1,4]<>34 then
      begin
        panduan:=false;
        a[x,y]:=0;
        exit;
      end;
  if (x=4)and(y=4) then
    if (a[4,4]+a[3,3]+a[2,2]+a[1,1]<>34)
    and(a[1,4]+a[1,1]+a[4,1]+a[4,4]<>34)then
      begin
        panduan:=false;
        a[x,y]:=0;
        exit;
      end;
  panduan:=true;
end;
procedure work(x,y:integer);
var i,j:integer;
begin
  if x=5 then
    begin
      inc(z);
      for i:=1 to 4 do
        begin
          for j:=1 to 4 do
            write(a[i,j],' ');
          writeln;
        end;
      writeln;
      //halt;
    end
  else
    begin
      if a[x,y]<>0 then
        begin
          if y+1=5 then
            work(x+1,1)
          else
            work(x,y+1);
        end
      else
      for i:=2 to 16 do
        begin
          if pd[i]=true then
            begin
             if (panduan(x,y,i)=true) then
               begin
                 if a[x,y]<>1 then
                   begin
                     a[x,y]:=i;
                     pd[i]:=false;
                     if y+1=5 then
                       work(x+1,1)
                     else
                       work(x,y+1);
                     pd[i]:=true;
                     a[x,y]:=0;
                   end
                 else
                   begin
                     if y+1=5 then
                       work(x+1,1)
                     else
                       work(x,y+1);
                   end;
               end;
            end;
        end;
    end;
end;
begin
  assign(input,'magic.in');
  reset(input);
  assign(output,'magic.out');
  rewrite(output);
  read(m,n);
  for j:=1 to 4 do
    for j1:=1 to 4 do
      a[j,j1]:=0;
  for j:=2 to 16 do
    pd[j]:=true;
  a[m,n]:=1;
  work(1,1);
  close(input);
  close(output);
end.