```// Program Man or Boy
/*
'begin'
'real' 'procedure' A (k, x1, x2, x3, x4, x5);
'value' k; 'integer' k;
'begin'
'real' 'procedure' B;
'begin' k:= k - 1;
B:= A := A (k, B, x1, x2, x3, x4);
'end';
'if' k <= 0 'then' A:= x4 + x5 'else' B;
'end';
outreal (A (10, 1, -1, -1, 1, 0));
'end';
*/
#include <stdio.h>
int main(int argc, char **argv)
{
#define _F(expr) ({ float *_thunk(void){ static float _f; _f = expr; return &_f; }; &_thunk; })
#define _FV(var) ({ float *_thunk(void){ return &var; }; &_thunk; })
float *a(int k, float *x1(void),
float *x2(void),
float *x3(void),
float *x4(void),
float *x5(void)) {
# define A(k,x1,x2,x3,x4,x5) (*a(k,x1,x2,x3,x4,x5))
#   define X1 (*x1())
#   define X2 (*x2())
#   define X3 (*x3())
#   define X4 (*x4())
#   define X5 (*x5())
static float A_result;
float *b(void) {
#     define B (*b())
static float B_result;

k = k - 1;
B_result = A_result = A(k, _F(B), _FV(X1), _FV(X2), _FV(X3), _FV(X4));
return &B_result;
}

if (k <= 0) A_result = X4 + X5; else (void)B;
return &A_result;
#undef B
#undef X5
#undef X4
#undef X3
#undef X2
#undef X1
}
printf("%f\n", A(10, _F(1.0), _F(-1.0), _F(-1.0), _F(1.0), _F(0.0)));

fflush(stdout);
return(0);
#undef A
}
```