void hestgl3(int n, float **a, float **b, float **x)
{
	float *allocate_real_vector(int, int);
	void free_real_vector(float *, int);
	void hsh2col(int, int, int, int, float, float, float **, float **);
	void hsh2row3(int, int, int, int, int, float, float,
						float **, float **, float **);
	int nm1,k,l,k1,l1;

	if (n > 2) {
		for (k=2; k<=n; k++)
			for (l=1; l<=k-1; l++) b[k][l]=0.0;
		nm1=n-1;
		k=1;
		for (k1=2; k1<=nm1; k1++) {
			l1=n;
			for (l=n-1; l>=k1; l--) {
				hsh2col(k,l,n,l,a[l][k],a[l1][k],a,b);
				a[l1][k]=0.0;
				hsh2row3(1,n,l1,n,l,b[l1][l1],b[l1][l],a,b,x);
				b[l1][l]=0.0;
				l1=l;
			}
			k=k1;
		}
	}
}