I. 1.
    d) !(a < -4 || a > -1) || !(a < 2 || a > 4)
    I. 2.
    a) 7
    b) 121, 253
    c)

                                        
                                            x <- n
                                            CAT TIMP x >= y EXECUTA
                                                x <- x - y
                                        
                                    

    d)
                                        
                                            #include <iostream>
                                            using namespace std;
    
                                            int n, y, x;
    
                                            int main(){
                                                cin>>n;
                                                x = 1, y = 2;
                                                while(x != 0 && y * y <= n){
                                                    x = n % y;
                                                    y = y + 1;
                                                }	
                                                cout<<y - 1;
                                            }
                                        
                                    

    II. 1.
    a. 14
    II. 2.
    b. 3
    II. 3
    a)
                                        
                                            #include <iostream> 
                                            using namespace std;
    
                                            int B[105][105], n, A[105][105], sum;
    
                                            int main(){
                                                cin>>n;
                                                for(int i = 1; i <= n; i++)
                                                    for(int j = 1; j <= n; j++)	
                                                        cin>>A[i][j];
    
                                                for(int i = 1; i <= n; i++)
                                                    for(int j = 1; j <= n; j++){
                                                        int sum = 0;
                                                        for(int x = 1; x <= n; x ++)
                                                            sum += A[i][x] * A[x][j];
    
                                                        B[i][j] = sum;
                                                    }
                                                
                                                bool ok = true;
    
                                                for(int i = 1; i <= n; i ++){
                                                    int p = B[i][1] % 2;
                                                    for(int j = 2; j <= n; j ++)
                                                        if(p != (B[i][j] % 2) )
                                                            ok = false;
                                                }
    
    
                                                    for(int i = 1; i <= n; i++, cout<<"\n")
                                                    for(int j = 1; j <= n; j++)	
                                                        cout<<B[i][j]<<" ";
    
                                                if(ok)
                                                    cout<<"B are proprietatea ParImpar";
                                                else
                                                    cout<<"B nu are proprietatea ParImpar";
                                            }
                                        
                                    

    b)
                                        
                                            Metoda folosita se bazeaza pe faptul ca fiecare element de pe fiecare linie va fi 
    inmultit cu fiecare element de pe coloana, iar suma produselor va reprezenta fiecare element din matricea rezultat
    Avem 3 cazuri posibile: | i i | | i i | | p p | A = | | sau A = | | sau A = | |, am notat cu i nr. impar si cu p nr. par | p p | | i i | | p p |
    Astfel B poate fi :
    1)
    | i i | | i i | | i * i + i * p i * i + i * p | B = | | x | | = | | | p p | | p p | | p * i + p * p p * i + p * p |
    | i i | = | | | p p |
    2)
    | i i | | i i | | i * i + i * i i * i + i * i | B = | | x | | = | | | i i | | i i | | i * i + i * i i * i + i * i |
    | p p | = | | | p p |
    3)
    | p p | | p p | | p * p + p * p p * p + p * p | B = | | x | | = | | | p p | | p p | | p * p + p * p p * p + p * p |
    | p p | = | | | p p |
    Din 1), 2) si 3) => Daca A respecta ParImpar atunci si
    A x A respecta ParImpar
    II. 4.
                                        
                                            #include <iostream>
                                            using namespace std;
    
                                            int sol[105], v[105], n, x[105];
                                            bool g = false;
    
                                            bool ok(int k){
                                                for(int i = 1; i < k; i++)
                                                    if(x[i] == x[k])	
                                                        return false;
                                                return true;
                                            }
    
                                            bool test(){
                                                for(int i = 1; i <= n; i++)
                                                    if(v[x[i]] == v[x[i + 1]])
                                                        return false;
                                                return true;
                                            }
    
                                            void bkt(int k){
                                                for(int i = 1; i <= n; i++){
                                                    x[k] = i;
                                                    if(ok(k)){
                                                        if(k == n){
                                                            if(test() && g == false){
                                                                g = true;
                                                                for(int i = 1; i <= n; i++)
                                                                    sol[i] = v[x[i]], cout<<sol[i]<<" ";
                                                            }
                                                        }
                                                        else{
                                                            bkt(k + 1);
                                                        }
                                                    }
                                                }
                                            }
    
                                            int main(){
                                                cin>>n;
                                                for(int i = 1; i <= n; i++)
                                                    cin>>v[i];
    
                                                bkt(1);
                                                if(!g)
                                                    cout<<"nu exista";
                                            }
                                        
                                    

    III. 1.
    b. 14
    III. 2.
    C(5, 3) = 10
    III. 3.
    a)
                                        
                                            2 5 8 | 7 3 6 | 9 4 1
                                            6 1 9 | 8 2 4 | 3 5 7
                                            4 3 7 | 9 1 5 | 2 6 8
                                            - - -   - - -   - - - 
                                            3 9 5 | 2 7 1 | 4 8 6
                                            7 6 2 | 4 9 8 | 1 3 5
                                            8 4 1 | 6 5 3 | 7 2 9
                                            - - -   - - -   - - -
                                            1 8 4 | 3 6 9 | 5 7 2
                                            5 7 6 | 1 4 2 | 8 9 3
                                            9 2 3 | 5 8 7 | 6 1 4
                                        
                                    

    b)
                                        
                                            Pentru fiecare din cele 9 submatrice ale grilei SUDOKU 
    Determinam care sunt elementele care nu apar in intervalul [1, 9] si salvam pozitiile necompletate
    Dupa care, pentru fiecare pozitie necompletata din submatrice ,
    alegem cate un element neplasat, in cazul in care elementul plasat nu apare nici pe linia, nici pe coloana curenta
    inseamna ca il putem plasa, dupa care putem merge la urmatoarea pozitie necompletata din submatrice, rezpectiv la
    urmatoarea submatrice
    Daca nu pot plasa toate elementele negative in submatricea curenta ,
    inseamna ca puzzle-ul nu are solutie.

    c)
                                        
                                            void SUDOKU(int a[15][15], int sol[15][15]){
                                                for(int i = 1; i <= 9; i++)	
                                                    for(int j = 1; j <= 9; j++)
                                                        sol[i][j] = a[i][j];
                                                
                                                struct  P{
                                                    int lin, col;
                                                } p[90];
                                            
                                                int sz = 0;
                                                bool n[15], ok = true;
                                            
                                                for(int i = 1; i <= 9 && ok == true; i += 3)
                                                    for(int j = 1; j <= 9 && ok == true; j += 3){
                                                        for(int e = 1; e <= 9; e ++)
                                                            n[e] = 0;
                                                        sz = 0;
                                            
                                                        for(int x = i; x <= i + 3 - 1; x ++)
                                                            for(int y = j; y <= j + 3 - 1; y ++){
                                                                if(sol[x][y] == 0)	
                                                                    p[++sz].lin = x, p[sz].col = y;
                                                                else
                                                                    n[sol[x][y]] = 1;
                                                        }
                                            
                                                        for(int k = 1; k <= sz; k ++){
                                                            int x = p[k].lin, y = p[k].col;
                                            
                                            
                                            
                                                            for(int e = 1; e <= 9; e ++)
                                                                if(n[e] == 0 && sol[x][y] == 0){
                                                                    bool g = false;
                                            
                                                                    for(int c = 1; c <= 9; c ++)
                                                                        if(sol[x][c] == e)
                                                                            g = true;
                                                                    
                                                                    for(int l = 1; l <= 9; l ++)	
                                                                        if(sol[l][y] == e)
                                                                            g = true;  
                                                                
                                            
                                                                    if(!g){
                                                                        sol[x][y] = e;
                                                                        n[e] = 1;
                                                                    }
                                                                
                                                            }
                                                        
                                                        if(sol[x][y] == 0){
                                                            ok = false;
                                                            for(int l = 1; l <= 9; l ++)
                                                                for(int c = 1; c <= 9; c ++)
                                                                    sol[l][c] = 0;
                                                        }
                                                    }
                                                }
                                            }