$B$*BT$?$;$$$?$7$^$7$?!#(Bpsc95$B$NLdBj$rH/I=$7$^$9!#(B
$B<g$JFbMF(B
$B!&9TNs$OL)9TNs$G$"$k(B
$B!&%W%m%0%i%`$N;EMM(B

$B>0!"%*%V%8%'%/%H%U%!%$%k!&$*$h$S!"4JC1$J(B main()$B4X?t$N%W%m%0%i%`$O!"(B
$B3F%^%7%s$N%a!<%+$5$s$+$i;22C<T$KG[I[$5$l$^$9!#(B

$B#1!KLdBj(B
 	$B!'Bg5,LOO"N)J}Dx<0(B Ax=b$B$r2r$/!#(B
	  	A$B!'Ls(B1000x1000$B!A(B2000x2000$B$NL)9TNs(B


$B#2!KG[I[$5$l$kLdBj%W%m%0%i%`$N;EMM$K$D$$$F(B

$B%3%s%F%9%H$G:n@.$5$l$k%W%m%0%i%`$O0J2<$N#3K\$G$"$k!#(B

1. $B9TNs@8@.(B     ($B0Q0w2qB&$G:n@.(B)
2. $B5a2r(B         ($B;22C<TB&$G:n@.(B)
3. $B8!>Z(B         ($B0Q0w2qB&$G:n@.(B)

$B$3$3$G!"(B1.,3.$B$N4X?t$r;22C<T$,<u$1$H$j!";22C<T$N%W%m%0%i%`$KAH9~$`!#(B
$B7W;;$OG\@:EY$H$9$k!#(B

$B7WB,$9$k;~4V$O!"!V#12sL\$N9TNs@8@.%W%m%0%i%`$,=*N;$7$F$+$i(B
$B8!>Z%W%m%0%i%`$N;O$a$^$G!W$H$9$k!#(B


$B!Z#1!%9TNs@8@.%W%m%0%i%`$K$D$$$F![(B

$B$3$N%W%m%0%i%`$O;22C<T$,;O$a$K8F$S=P$94X?t$G$"$k!#!J2?2s8F$S=P$7$F$b#O#K!K(B
$B;22C<T$K$O!"$3$N%W%m%0%i%`$NFbMF$r8xI=$7$J$$!#(B

$B9TNs$*$h$S%Y%/%H%k$r3F(BPE$B$K3JG<$9$kJ}K!$r0J2<$N#2<oN`MQ0U$9$k!#(B
$B!&(B( block ,   *   )     $B!D!JCm!KHV9f$K0UL#$O$J$$!#(B
   $B9TNs$r9TJ}8~$GJ,3d$9$k!#$3$N$H$-%Y%/%H%k$O9TNs(B A[][]$B$N:G1&Ns$H(B
   $BF1$8J,3d$r$9$k!#(B
$BNc!K(B
              $B9TNs#A(B[][]                         $B%Y%/%H%k#B(B[]

                $BNs"*(B
       0   1   2   3   4   5   6 ...                   1   $B!!!@(B  PE0 $B$K(B
      10  11  12  13  14  15  16 ...                   2     $B!?(B   $B3d$jEv$F(B
      --------------------------------------------------
$B9T(B    20  21  22  23  24  25  26 ...                   3    $B!!!@(B  PE1 $B$K(B
$B"-(B              $B!'(B                                     $B!'(B     $B!?(B   $B3d$jEv$F(B
      --------------------------------------------------
                $B!'(B                                     $B!'(B
     110 111 112 113 114 115 116 ...                   10
      --------------------------------------------------
     120 121 122 123 124 125 126 ...                   11   $B!!!@(B  PE5 $B$K(B
                $B!'(B                                     $B!'(B     $B!?(B   $B3d$jEv$F(B

	

$B!&(B(   *   , block )
   $B9TNs$rNsJ}8~$GJ,3d$9$k!#$3$N$H$-%Y%/%H%k$O9TNs(B A[][]$B$N:G>e9T$H(B
   $BF1$8J,3d$r$9$k!#(B
$BNc!K(B
              $B9TNs#A(B[][]                         $B%Y%/%H%k#B(B[]

                $BNs"*(B
       0   1 |  2   3 |  4   5 |  6 ...   |           1   $B!!!@(B  PE0 $B$K(B
      10  11 | 12  13 | 14  15 | 16 ...   |           2     $B!?(B   $B3d$jEv$F(B
             |        |        |          |          ---
$B9T(B    20  21 | 22  23 | 24  25 | 26 ...   |           3    $B!!!@(B  PE1 $B$K(B
$B"-(B           |   $B!'(B   |        |          |           :      $B!?(B   $B3d$jEv$F(B
             |        |        |          |          ---
             |   $B!'(B   |        |          |           :
     110 111 |112 113 |114 115 |116 ...   |          10
             |        |        |          |          ---
     120 121 |122 123 |124 125 |126 ...   |          11   $B!!!@(B  PE5 $B$K(B
             |   $B!'(B   |        |          |           :     $B!?(B   $B3d$jEv$F(B
     PE0$B$K(B     PE1$B$K(B    PE2$B$K(B
      $B3dEv(B      $B3dEv(B     $B3dEv(B	


$B!]!]!]!]!]!]!]!]!]!]!]!]!]!]!]!]!]!]!]!]!]!]!]!]!]!]!]!]!]!](B
$B$3$3$G!"(B(block,*),(*,block)$B$K$*$1$k(Bblock$BI}$O(B
    block$B$NI}(B $B!'(B m $B!a(B ( n / pe ) $B$r@Z$j>e$2$k(B

    $BHV9f$N>.$5$$(BPE$B$+$i(B m $B8D$NNs(B (or $B9T(B)$B$r3d$jEv$F$k!#(B

$BNc!K(B n = 1025  , PE = 8
      pe          1   2   3   4   5   6   7   8
  $BC4Ev(Bblock$B?t(B   129 129 129 129 129 129 129 122

$B!]!]!]!]!]!]!]!]!]!]!]!]!]!]!]!]!]!]!]!]!]!]!]!]!]!]!]!]!]!](B

$B!Z#2!%5a2r%W%m%0%i%`$K$D$$$F![(B

$B$3$l$O;22C<T$,:n@.$9$k!#H?I|2rK!!"D>@\2rK!$N$I$A$i$G$b9=$o$J$$!#(B
$B2r%Y%/%H%k(B x[]$B$N3JG<(B PE$B$O!"1&JU%Y%/%H%k(B b[]$B$N=i4|3dEv$HF1$8$H$9$k!#(B
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

$B!Z#3!%8!>Z%W%m%0%i%`$K$D$$$F![(B

$B$3$N%W%m%0%i%`$O;22C<T$,:G8e$K8F$S=P$94X?t$G$"$k!#(B
$B!J$3$N4X?t$r8F$S=P$9$H!"<+F0E*$K(B $B#E#X#I#T(B $B$5$l$k!K(B
$B;22C<T$K$O!"$3$N%W%m%0%i%`$NFbMF$r8xI=$7$J$$!#(B

$B8m:9$NH=Dj$O(B
            Max | Ax-B | < $B&E!"(B $BC"$7&E!A(B10^{-11}  $B!JK\A*LdBj$G$OL$Dj!K(B
$B$H$9$k!#(B

/********************* $B3F(BPE$B$N%W%m%0%i%`(B ***********************/

/* (block, * ) : $BJ}Dx<0Kh$K3F(BPE$B$K3d$jEv$F(B :$B9TJ}8~$KJ,3d(B */
double        a[2048][32];   /* $B9TNs(B */
/* ( * ,block) : $BNsJ}8~$KJ,3d(B */
double        a[32][2048];   /* $B9TNs(B */

double        b[2048],       /* $B1&JU%Y%/%H%k(B  */
              x[2048],       /* $B2r%Y%/%H%k(B    */
              co_x[2048];    /* $BM=Hw$N$?$a$NG[Ns(B (gauss()$B$NCf$G;HMQ(B)*/

void	cell_main()
{
  int		pe, cid, tid, k;

  int n,n1,m1;      /* n : $B9TNs%5%$%:(B
		     * n1: $B=D!J9T!K$NC4Ev%5%$%:(B
		     * m1: $B2#!JNs!K$NC4Ev%5%$%:(B
		     */

  int key;          /* $BLdBj$r;XDj$9$kJQ?t(B : key == 1, 2, or 3*/

  generate_c(key,&n,&n1,&m1); /* problem_c.o $B$NCf$K$"$j$^$9(B
			       * $BJQ?t(B n, n1, m1 $B$r3JG<(B
			       * a[n1][m1] $B$r3JG<$9$k(B
			       * n       : $BA4BN$N9TNs%5%$%:(B
			       * n1 x m1 : $BC4Ev$9$k9TNs$N%5%$%:(B
			       * b[n1 or m1] $B$r3JG<$9$k(B
			       * n       : $BA4BN$N%Y%/%H%k%5%$%:(B
			       * (block,*)$B$N;~(B n1 : $BC4Ev$9$k%Y%/%H%k$N%5%$%:(B
			       * (*,block)$B$N;~(B m1 : $BC4Ev$9$k%Y%/%H%k$N%5%$%:(B
			       *
			       * $B$3$N4X?t$N:G8e$G!";~4V7WB,$r3+;O$9$k(B
			       *
			       */
  
  /* $B;22C<T$O2r%Y%/%H%k(B x[] $B$r(B $B%Y%/%H%k(Bb[]$B$N=i4|G[CV$N(BPE$B$K3JG<$9$k(B  */
  gauss(n,n1,m1);             /* $B;22C<T$,:n$k7W;;ItJ,(B */

  check_c(key,&n,&n1,&m1);    /* problem_c.o $B$NCf$K$"$j$^$9(B
			       * $B$3$N4X?t$N;O$a$^$G$N;~4V$r7W$k(B
			       * $B:GBg$N;D:9$r7W;;$7!"<+F0E*$K(B exit() $B$7$^$9(B 
			       */
}

/********************* $B%[%9%H$N%W%m%0%i%`(B ***********************/
void	host_main(argc,argv)
     int argc;
     char *argv[];
{
  int		key = 0;
  int		n;

  if(argc == 2)key = atoi(argv[1]);

  /* key $B$,#1$+$i#3$NCM$G$J$+$C$?$i!"6/@)E*$K(B key $B$r(B $B#1$K$9$k(B */
  if(key != 1 && key != 2 && key != 3 ){
    printf("key = 1;\n");
    key = 1; 
  }
  generate_and_check_h(key,pe); /* problem_h.o $B$NCf$K$"$j$^$9(B
				 * key$B$r3F(BPE$B$KAw?.(B.
				 *   $B=hM};~4V$r7WB,$9$k(B
				 *   $B:GBg$N;D:9(B(MAX|ax-b|)$B$r7W;;$9$k(B
				 * $B<+F0E*$K(B exit() $B$9$k!#(B
				 */
}

$B!]!]!]!]!]!]!]!]!]!]!]!]!]!]!]!]!]!]!]!]!]!]!]!]!]!]!]!]!]!]!]!]!]!]!]!](B

$B#3!K%3%s%F%9%H$N%k!<%k!J0JA0$*EA$($7$?FbMF$G$9!K(B

$B!}!VM=A*!W!VK\A*!W$K$D$$$F(B

$B;vL36I$GMQ0U$9$kLdBj$O!VM=A*!W!VK\A*!W$=$l$>$l#3Bj$E$D=PBj$5$l$^$9!#(B

$B!&M=A*!'K\A*$K=P>l$G$-$k%W%m%0%i%`7hDj$9$k(B
   $B;22C<T$K$O!"%G!<%?$O8x3+$5$l$k!#(B
  $B!JM=A*LdBj$OLs(B 1000 x 1000 $B$N9TNs$r#3K\$H$9$k!#!K(B


$B!&K\A*!'>e0LF~>^<T$r7hDj$9$k(B
   $B;22C<T$K$O!"%G!<%?$OHs8x3+(B
  $B!JK\A*LdBj$O!"(B1000x1000 $B!A(B 2000x2000 $B$^$G$NLdBj$r#3K\$H$9$k!#$=$N$?$a;2(B
    $B2C<T$O(B 2048x2048 $B$^$G$N<B9T$,2DG=$J%W%m%0%i%`$r:n@.$7$F$*$/!#!K(B
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

$B;22C<T$O!VM=A*!W$N%G!<%?$N<B9T;~4V$r;vL36I$K?=9p$9$k!J!:@Z(B : 4/30$B!K(B
$B!J;22C<T$O!V<B9T;~4V!W!V%=!<%9!W$N%U%!%$%k$rDs=P$9$k!#!K(B
$B!t#4<R$K;22C$7$F$$$k?M$O!"3F%^%7%s$4$H$K?=9p$9$k(B

$B;vL36I$O!VM=A*!W$N<B9T;~4V$NC;$$$b$N>e0L#1#0%A!<%`$rA*=P$7!";vL36I$,;22C(B
$B<T$N%W%m%0%i%`$K!VK\A*!W$N%G!<%?$rAH$_9~$_!"<B9T$9$k!#(B
$B!t3F%^%7%s$4$H$K!"#1#0%A!<%`$rA*=P!#(B

$B;vL36I$O!VK\A*!W$N<B9T;~4V$+$i!"F~>^<T$r7hDj$9$k!#(B
$B!t!J>/$7$/$I$$$G$9$,!K3F%^%7%s$4$H$K!"F~>^<T$r7hDj(B

$B<B9T;~4V$NHf3S$NJ}K!$O!"#3Ld$=$l$>$l$K$+$+$C$?<B9T;~4V$NOB$rHf3S$7$^$9!#(B
$B!J9TNs%5%$%:$,0[$J$k>l9g!"9TNs%5%$%:$G=E$_IU$1$r$7$h$&$H9M$($F$$$^$9!K(B


$B!}2rK!$K$D$$$F(B
$BO"N)J}Dx<0$r(B $BD>@\K!!"H?I|K!!"D>@\!]H?I|$N%O%$%V%j%C%I!"$I$A$i$G2r$$$F$b(B
$B9=$$$^$;$s!#(B

$B!};D:9$K$D$$$F(B

$BO"N)J}Dx<0$N2rK!$G$9$+$i!"2r$N8m:9$,Bg$-$/$F$O:$$j$^$9!#$=$3$G(B
$B;vL36I$G$O!"5vMF$5$l$k;D:9$N:GBgCM$r;XDj$7$^$9!#$3$N:GBgCM$r1[$($?(B
$B%W%m%0%i%`$O<:3J$H$J$j$^$9!#(B
$BH?I|2rK!$rA*Br$9$k?M$N$?$a$K!"$"$i$+$8$a;D:9$N:GBgCM$O8xI=$7$^$9!#(B

$B>0!"7W;;$OG\@:EY(B double $B$G9T$J$C$F2<$5$$!#(B

$BEvA3!"$D$.$N$h$&$J>u67$bH/@8$9$k$H;W$o$l$^$9!#(B
$B!&!VM=A*!W%G!<%?$G$O!"8m:9$,5vMF$5$l$k;D:9$N:GBgCM0J2<$G$"$C$F$b!"(B
  $B!VK\A*!W%G!<%?$G$O!"8m:9$,5vMF$5$l$k;D:9$N:GBgCM$r1[$($F$7$^$&>l9g!#(B
$B"*$3$N>l9g$O;DG0$J$,$i<:3J$H$J$j$^$9!#(B


$B!}%[%9%H$G7W;;$N0lIt$r<B9T$9$k$3$H$O5v2D$7$J$$(B

$B!}(Bmake$B$G4JC1$K<B9T%U%!%$%k$,$G$-$k$3$H!JFC$K!"#P#S#C$GMQ0U$7$?%^%7%s0J30$G%3!<%G%#%s%0$7$F$$$k;22C<T$OCm0U!*!*!K(B

$B!}%3%s%Q%$%i!&%3%s%Q%$%i%*%W%7%g%s$K$D$$$F(B
$B#P#S#C;vL36I$O%3%s%Q%$%i!&%3%s%Q%$%i%*%W%7%g%s$K@)8B$r2C$($J$$!#(B
$B!JCm0U!'#P#S#CB&$N8!>Z;~$K!"(B make $B$,$G$-$k$3$H!"!K(B

$B!};22C<T$OM?$($i$l$?(BPE$BA4$F$r;H$&I,MW$O$J$$!#(B
