Không hiểu sao, đến số hàng là 3, số cột là 4 thì nó không được như mong muốn.. Không biết thuật toán có vấn đề gì?

Code:
#include <stdio.h>
main()
{
    int i, j, n, m, tren=0, trai=0,  gt = 0, a[50][50];
    printf("Nhap so dong m = ");
    scanf("%d", &m);
    printf("Nhap so cot n = ");
    scanf("%d", &n);
    int phai = n-1;
    int duoi = m-1;
    while(gt < n*m)
    {
    	//gan gia tri tu trai sang phai
        for(i=trai; i<=phai; i++) a[tren][i] = gt++;
        for(i=tren+1; i<=duoi; i++) a[i][phai] = gt++;
        for(i=phai-1; i>=trai; i--)	a[duoi][i] = gt++;
        for(i=duoi-1; i>=tren+1; i--) a[i][trai] = gt++;
        trai++;
	tren++;
	phai--; //
	duoi--; //dieu kien thu nho xoan oc
    }

//xuat ma tran
    for(i=0; i<m; i++)
    {
        for(j=0; j<n; j++)
            printf("%4d ",a[i][j]);
        printf("\n");
    }
}