#include <stdio.h>
#include <stdlib.h>
#define MAX 100

void leggiMatrice(int mat[MAX][MAX], int r, int c);
void stampaMatrice(int mat[MAX][MAX], int r, int c);
void ordinaVettore(int vet[MAX],int vetMin[MAX], int r);
void scambiarighe(int mat[MAX][MAX], int c, int indiceRiga1, int indiceRiga2);
void checkRigheEInsert(int mat[MAX][MAX],int c, int r);



int main()
{
    int mat[MAX][MAX];
    int vetMin[MAX];
    int primaColonna[MAX];
    int r=0;
    int c=0;

    printf("Inserisci, per piacere, il numero di righe della matrice?\n");
    scanf("%d",&r);
    printf("Inserisci, per piacere, il numero di colonne della matrice?\n");
    scanf("%d",&c);
    printf("Inserisci, per piacere, la matrice?\n");
    leggiMatrice(mat, r, c);
    printf("La matrice inserita �:\n");
    stampaMatrice(mat, r, c);
    for(int i=0; i<r; i++)
    {
        primaColonna[i]=mat[i][0];

    }
    ordinaVettore(primaColonna,vetMin,r);


    for(int i=0; i<r; i++)
    {
        scambiarighe(mat,c,vetMin[i],i);

    }
    printf("La matrice ordinata �:\n");


    stampaMatrice(mat, r, c);

    checkRigheEInsert(mat,c, r);





}

void leggiMatrice(int mat[MAX][MAX], int r, int c)
{
    for(int i=0; i<r; i++)
    {
        for(int j=0; j<c; j++)
        {
            printf("Inserisci l'elemento di posto [%d][%d]:\n",i+1,j+1);
            scanf("%d",&mat[i][j]);
        }
    }

}

void stampaMatrice(int mat[MAX][MAX], int r, int c)
{

    for(int i=0; i<r; i++)
    {
        for(int j=0; j<c; j++)
        {
            printf("%d",mat[i][j]);
        }
        printf("\n");
    }
}

void ordinaVettore(int vet[MAX], int vetMin[MAX], int r){
    int min,temp =0;
    for(int i=0; i<r; i++)
    {
        min = i;
        for(int j=i+1; j<r; j++)
        {
            if(vet[min]>vet[j])
            {
                min = j;
            }

        }
        vetMin[i]=min;
        temp=vet[min];
        vet[min] = vet[i];
        vet[i] = temp;
    }

}

void scambiarighe(int mat[MAX][MAX], int c, int indiceRiga1, int indiceRiga2){
    int temp = 0;
    for(int i =0; i< c; i++)
    {
        temp = mat[indiceRiga1][i];
        mat[indiceRiga1][i] = mat[indiceRiga2][i];
        mat[indiceRiga2][i] = temp;

    }
}



void checkRigheEInsert(int mat[MAX][MAX], int c, int r)
{

    int mat2[MAX][MAX];
    for(int l=0; l<r; l++)
    {
        for(int m=0; m<c; m++)
        {
            mat2[l][m]=mat[l][m];
        }
    }
    int t = r;
            stampaMatrice(mat2, t, c);

    int Equal = 1;
    for(int i=0; i<r-1; i++)
    {
        Equal=1;
        for(int j=0; j<c; j++)
        {
            if(mat[i][j]!=mat[i+1][j])
            {
                NotEqual=0;
            }

        }
        if(NotEqual == 1)
        {
            t++;
            for(int k =i; k<t; k++)
            {
                for( int y=0; y<c; y++)
                {
                     if(k==t-r+i)
                    {
                        mat2[k][y] = 0;
                    }
                    else if (k>t-r+i)
                    {
                        mat2[k][y] = mat[k-(t-r)][y];
                    }
                }

            }

        }

    }
    printf("\n");
        stampaMatrice(mat2, t, c);


}