#define M 100
#define N 150

float akep[M][N], bkep[M][N];

void gauss(double fwhm)
{
    int i, j, k;
    double a, b, c, d;

    for (i = 0; i < M; i++) {
        for (j = 0; j < N; j++) {
            a = b = 0.0;
            for (k = 0; k < N; k++) {
                d = (j - k);
                c = -0.5 * d * d / (fwhm * fwhm);
                if (d > -9.0) {
                    c = exp(c);
                    a += c * akep[i][k];
                    b += c;  
                }
            }
            bkep[i][j] = a/b; 
        }
    }
    for (j = 0; j < N; j++) {
        for (i = 0; i < M; i++) {
            a = b = 0.0;
            for (k = 0; k < M; k++) {
                d = (i - k);
                c = -0.5 * d * d / (fwhm * fwhm);
                if (d > -9.0) {
                    c = exp(c);
                    a += c * bkep[k][j];
                    b += c;  
                }
            }
            akep[i][j] = a/b; 
        }
    }
}