
{ UØdavinio autorius: Irus Grinis, Vilniaus "µØuolyno" v.m.
  infomatikos mokytojas;
  SprendimÐ bei testus parengÓ: Irus Grinis
Taigi,turime tokiÐ lentelÒ

1       4,5,8,9,10
2       9,10
3       8,10
4       3,5,9,10
5       6,8,9
6       2,3,4,5,8,10
7       1,2,4,6,8,9,10
8       10
9       7,8,10
10      5,7,9,10.

PaØymÓkime ai, kur i yra sveikas skaiÑius nuo 0  iki 9 - pradinius
sakiÑius  automato  langeliuose, o xi - kiek  kartÖ  buvo  paspaustas
i-tasis  mygtukas.Tada, paØymÓjÒ b - skaiÑiÖ, kurÔ norÓtume gauti automato
langeliuse ( Ør. toliau ), galime uØraÕyti  tokias  lygtis:

   (a1                   +x7           ) mod 10=b
   (a2                +x6+x7           ) mod 10=b
   (a3          +x4   +x6              ) mod 10=b
   (a4 +x1            +x6 +x7          ) mod 10=b
   (a5 +x1      +x4   +x6          +x10) mod 10=b
   (a6             +x5    +x7          ) mod 10=b
   (a7                          +x9+x10) mod 10=b
   (a8 +x1   +x3   +x5+x6 +x7   +x9    ) mod 10=b
   (a9 +x1+x2   +x4+x5    +x7      +x10) mod 10=b
   (a10+x1+x2+x3+x4    +x6+x7+x8+x9+x10) mod 10=b.

   PaaiÕkinsime, kaip  gavome, pavyzdØiui, pirmÐ lygtÔ.Kadangi pirmame
   langelyje turime skaiÑiu a1, tai paspaudus x7 kartÖ ( kiti mygtukai
   nekeiÑia pirmojo  langelio ) septintÐjÔ  mygtukÐ,gausime skaiÑiÖ b.

   IÕ lygÑiÖ   nuosekliai   gauname (raÕome  1000 tam, kad  negautume nulio)

    x7 = (1000+b-a1) mod 10 ( IÕ pirmos)
    x6 = (1000+b-a2-x7) mod 10 (iÕ antros )
    x5 = (1000+b-a6-x7) mod 10 (IÕ ÕeÕtos )
    x1 = (1000+b-a4-x6-x7) mod 10 (IÕ ketvirtos)
    x4 = (1000+b-a3-x6) mod 10 ( IÕ treÑios)
    x10 = (1000+b-a5-x1-x4-x6) mod 10 (IÕ penktos)
    x9 =(1000+b-a7-x10) mod 10 (IÕ septintos)
    x3 = (1000+b-a8-x1-x5-x6-x7-x9) mod 10 (IÕ aÕtuntos)
    x2 = (1000+b-a9-x1-x4-x5-x7-x10) mod 10 (IÕ devintos)
    x8 = (1000+b-a10-x1-x2-x3-x4-x6-x7-x9-x10) mod 10 (IÕ deÕimtos)

  Kadangi, skaiÑius  b mums nÓra  Øinomas: tiesiog jam  esant turime gauti
  maØiausiÐ sumÐ x1+x2+...+x10, tai  belieka  tik  perinkti visus b nuo 0
  iki 9, kÐ  gali atlikti  kompiuteris  akimirksniu.


}

program  automatas;

const prad='automat.dat';
      ats ='automat.rez';

var  a,sprendimas,x:array[1..10] of word;



     procedure nuskaityti;

      var i:word;
          fin:text;

     begin
      assign(fin,prad);
      reset(fin);
      for i:=1 to 10 do
       read (fin,a[i]);
      close(fin);
     end;

     function  RastiIlgi(b:word):word;
                  { SprendØiame lygÑiÖ sistemÐ ir surandame jo ôilgÔõ-mygtukÖ
                    paspaudimÖ kiekÔ}
      var i,ilgis:word;
     begin

     ilgis:=0;

     x[7]  := (1000+b-a[1]) mod 10 ;
     x[6]  := (1000+b-a[2]-x[7]) mod 10;
     x[5]  := (1000+b-a[6]-x[7]) mod 10;
     x[1]  := (1000+b-a[4]-x[6]-x[7]) mod 10;
     x[4]  := (1000+b-a[3]-x[6]) mod 10;
     x[10] := (1000+b-a[5]-x[1]-x[4]-x[6]) mod 10;
     x[9]  := (1000+b-a[7]-x[10]) mod 10;
     x[3]  := (1000+b-a[8]-x[1]-x[5]-x[6]-x[7]-x[9]) mod 10;
     x[2]  := (1000+b-a[9]-x[1]-x[4]-x[5]-x[7]-x[10]) mod 10;
     x[8]  := (1000+b-a[10]-x[1]-x[2]-x[3]-x[4]-x[6]-x[7]-x[9]-x[10]) mod 10;

     for i:=1 to 10 do
      ilgis:=ilgis+x[i];
     RastiIlgi:=ilgis;

     end;

     function RastiTrumpiausiaSeka:word;
                   { IjeÕkome  ôtrupiausioõ sprendinio - tikriname
                     visus b nuo 0 iki 9 }


     var b,MinIlgis,Ilgis,i:word;
     begin
      MinIlgis:=1000;
      for b:=0 to 9 do
       begin
       Ilgis:=RastiIlgi(b);
          if MinIlgis>Ilgis
                 then begin
                        MinIlgis:=Ilgis;
                        for i:=1 to 10 do
                           sprendimas[i]:=x[i];
                       end;
       end;
     RastiTrumpiausiaSeka:=MinIlgis;
     end;


var fout:text;
    i:word;

begin        { programos }
  assign(fout,ats);
  rewrite(fout);
  writeln(fout,'GALIMA'); { Nes sprendimas  egzistuoja visada }
  nuskaityti;
  writeln(fout,RastiTrumpiausiaSeka);
  for i:=1 to 10 do
   writeln(fout,sprendimas[i]);
  close(fout);
end.        { programos }


