fork download
  1. using System;using System.Collections.Generic;using System.Linq;namespace Z{public class P{public static void Main(){new P().K(4,7);}int x, y;void K(int a, int b){x=a;y=b;for(var s=0;s<x*y;s++)K(new[]{s});Console.WriteLine("NOT POSSIBLE");}void K(int[] v){if(v.Length<x*y)foreach(var m in M(v))K(v.Concat(new[] { m }).ToArray());else{Console.WriteLine(String.Join("\n",v.Select((p,i)=>new{p,i}).OrderBy(e=>e.p).GroupBy(e=>e.p/y).Select(g=>String.Join(" ",g.Select(e=>(e.i+1).ToString()).ToArray())).ToArray()));Environment.Exit(0);}}IEnumerable<int> M(int[] v){var c=v.Last();var q=new{X=c/y,Y=c%y};return(from m in new[]{new{X=1,Y=2},new{X=2,Y=1}}from d in Enumerable.Range(0,4).Select(i=>new{X=(i&2)-1,Y=(i&1)*2-1})select new{X=q.X+d.X*m.X,Y=q.Y+d.Y*m.Y}into p where p.X>=0&&p.Y>=0&&p.X<x&&p.Y<y select p.X*y+p.Y).Except(v);}}}
  2.  
  3.  
Success #stdin #stdout 4.73s 37616KB
stdin
Standard input is empty
stdout
1 16 9 22 3 28 11
8 23 2 15 10 21 4
17 14 25 6 19 12 27
24 7 18 13 26 5 20