#include <stdlib.h>
#include <stdio.h>

#define u_tilde 163

int main()
{
    int **matriz=NULL, M, N, i, j;

    do{
        printf("Ingrese el n%cmero de filas: ", u_tilde);
        scanf("%d", &M);
        printf("Ingrese el n%cmero de columnas: ", u_tilde);
        scanf("%d", &N);
        if(M<0 || N<0)
            printf("Ingresa valores positivos\n\n");
    }while(M<=0 || N<=0);

    matriz=(int**)malloc(M*sizeof(int*));

    if(matriz==NULL)
    {
        printf("No hay memoria suficiente.\n");
        return 0;
    }

    for(i=0;i<M;i++)
    {
        matriz[i]=(int*)malloc(N*sizeof(int));
        if(matriz[i]==NULL)
        {
            for(i=i-1;i>=0;i--)
                free(matriz[i]);
            free(matriz);
            printf("No hay memoria suficiente.\n");
            return 0;
        }
    }

    for(i=0;i<M;i++)
    {
        for(j=0;j<N;j++)
        {
            printf("Ingrese m[%d][%d]: ", i+1, j+1);
            scanf("%d", &matriz[i][j]);
        }
    }

    printf("La matriz es:\n\n");

    for(i=0;i<M;i++)
    {
        for(j=0;j<N;j++)
        {
            printf("%d ", matriz[i][j]);
        }
        printf("\n");
    }
    free(matriz);
    printf("\n\n");

}
