SCADENTA: 30 decembrie
    DOMENIU: Backtracking
    TIMP DE IMPLEMENTARE: O ora (ora pro nobis)
     (reamintesc, din partea mea puteti trimite surse la care ati lucrat
      si sapte ceasuri, dar e bine sa pastrati o copie a sursei asa cum
      arata ea dupa timpul recomandat, ca sa va puteti da seama cum v-ati
      comporta in timp de concurs)
    
    Sa consideram o tabla de 5x5 patratele si 25 de piese patrate, fiecare
    piesa putand avea una din formele:
    
          +-------------+   +-------------+   +-------------+
          |      |      |   |      |      |   |      |      |
          |      |      |   |       \     |   |     /       |
          |------|------|   |----     ----|   |----     ----|
          |      |      |   |     \       |   |       /     |
          |      |      |   |      |      |   |      |      |
          +-------------+   +-------------+   +-------------+
                (1)               (2)               (3)
    
    Se observa ca piesa (1) are conectate marginile N-S si E-V, piesa 2
    are conectate marginile N-E si S-V, iar piesa 3 are conectate
    marginile N-V si S-E. Subliniem ca cele doua linii din piesa 1 NU se
    intersecteaza, ci trec "una pe sub cealalta".
    
    Se cere sa se aseze cele 25 de piese pe tabla in asa fel incat sa se
    obtina un drum care:
    
    (1) Sa treaca prin fiecare patrat EXACT o data;
    (2) Sa nu se autointersecteze;
    (3) Sa porneasca din coltul de NV al tablei (linia 1, coloana 1),
        incepand de la exteriorul tablei (fie dinspre nord, fie dinspre
        vest);
    (4) Sa se termine in coltul de SE al tablei (linia 5, coloana 5) si sa
        paraseasca tabla.
    
    INTRAREA: De pe prima si singura linie a fisierului BLACK.IN se vor citi
    numerele N1, N2 si N3, reprezentand numarul de piese din tipurile 1, 2
    si 3. Se garanteaza ca suma lor este 25.
    
    IESIREA: In fisierul BLACK.OUT se va tipari o matrice cu 5x5 numere
    separate prin spatii, reprezentand tipul piesei plasate in fiecare
    patratel. Daca exista mai multe solutii, se va tipari una la alegere.
    Daca nu exista nici o solutie, fisierul BLACK.OUT va contine numai
    mesajul "Imposibil".
    
    EXEMPLE:
    BLACK.IN                BLACK.OUT
    6 9 10                  1 2 3 1 2
                            3 3 1 3 3
                            1 3 3 2 2
                            1 2 2 3 3
                            2 1 3 2 2
    
    BLACK.IN                BLACK.OUT
    25 0 0                  Imposibil
    
    TIMP DE EXECUTIE: O secunda pe un Cyrix P200 / 96MB RAM / Windows 95
    
    Bafta!
    
    Observatii pentru cei mici:
    A) Citirea datelor din fisier se poate face in felul urmator:
    var F:Text;
        N1, N2, N3:Integer;
    ...
    Assign(F, 'black.in'); Reset(F);
    Read(F, N1, N2, N3);
    Close(F);
    
    B) Scrierea unei matrice A in fisier se poate face in felul urmator:
    var G:Text;
        A:array[1..5, 1..5] of Integer;
        i,j:Integer;
    ...
    Assign(G, 'black.out'); Rewrite(G);
    for i:=1 to 5 do
      begin
        for j:=1 to 4 do Write(F, A[i,j], ' ');
        WriteLn(F, A[i,5]);
      end;
    Close(G);