#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 contaValori(int mat[MAX][MAX], int vet[MAX*MAX], int r, int c, int *ValoriDiversi);


struct terna
{
    int elemento;
    int numOccorrenze;
    int mat[MAX*MAX][2];
};

//struct terna VettoreDiTerne[MAX*MAX];



int main()
{
   struct terna VettoreDiTerne[10];
   int r = 0;
   int c = 0;
   int mat[MAX][MAX];
   leggiMatrice(mat,&r,&c);
   stampaMatrice(mat,r,c);
   int ValoriDiversi = 0;
   int vet[MAX*MAX];
   contaValori(mat, vet, r, c, &ValoriDiversi);
   int occorrenze = 0;
   for (int k=0; k<ValoriDiversi; k++){
        VettoreDiTerne[k].elemento = vet[k];
        occorrenze = 0;
        for(int i=0; i<r; i++){
            for (int j=0; j<c; j++){
                if(VettoreDiTerne[k].elemento == mat[i][j])
                {
                    VettoreDiTerne[k].mat[occorrenze][0] = i;
                    VettoreDiTerne[k].mat[occorrenze][1] = j;
                    occorrenze++;
                }
            }
        }
        VettoreDiTerne[k].numOccorrenze = occorrenze;
   }

   for(int i=0; i< ValoriDiversi; i++){
    printf("\n");
    printf("Il valore %d esiste %d volte\n", VettoreDiTerne[i].elemento, VettoreDiTerne[i].numOccorrenze);
    printf("Le posizioni nella quale e' presente sono:\n");
    for(int j=0;j<VettoreDiTerne[i].numOccorrenze; j++){
        printf("\n[%d][%d]", VettoreDiTerne[i].mat[j][0],VettoreDiTerne[i].mat[j][1]);
    }

   }


}



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

    printf("Inserisci, per piacere, il numero di righe");
    scanf("%d",r);
    printf("Inserisci, per piacere, il numero di colonne");
    scanf("%d",c);

    for(int i=0; i<*r; i++){
        for(int j=0; j<*c; j++){
            printf("Inserisci l'elemento di posto [%d][%d]", 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++){
              printf("\n");
        for(int j=0; j<c; j++){
            printf(" %d ", mat[i][j]);
        }
    }
}


void contaValori(int mat[MAX][MAX], int vet[MAX*MAX], int r, int c, int *ValoriDiversi){
    *ValoriDiversi=0;

    int trovato = 1;

    for(int i=0; i<r; i++){
        for(int j=0; j<c; j++){
            trovato = 1;
            for(int k=0; k<*ValoriDiversi; k++){
                if(mat[i][j] == vet[k]){
                    trovato = 0;
                }
            }
            if(trovato == 1){
                vet[*ValoriDiversi] = mat[i][j];
                *ValoriDiversi = *ValoriDiversi +1;
            }
        }
    }


}