/*
 * YOUR INFO HERE!
 */

// FINAL VERSION:
#ifdef EULER_PROBLEM
// BUILDING AREA:

struct Euler_In{};

struct Euler_Result{
    int product;
};

static const int PYTHAG_SUM = 1000;

Euler_Result euler_main(Euler_In in){
#if 0
    int a,b,c=1;
    int sa,sb,sc;
    int g=1;
    
    while (g){
        ++c;
        
    }
#endif    
#if 1
    int a,b,c;
    int sa,sb,sc;
    int e;
    int g=1;
    
    c = ((PYTHAG_SUM+2)/3) + 1;
    
    while (g){
        ++c;
        sc = c*c;
        b = c-1;
        a = PYTHAG_SUM-b-c;
        while (a<b){
            sa = a*a;
            sb = b*b;
            if (sa+sb == sc){
                g=0;
                break;
            }
            --b;
            a = PYTHAG_SUM-b-c;
        }
    }
    
#endif
    
    int p=a*b*c;
    Euler_Result result;
    result.product = p;
    return result;
}

void euler_print(Euler_Result answer, Euler_In in){
    printf("%d\n", answer.product);
}

#define EULER_CHECK

bool euler_check(Euler_Result answer, Euler_In in){
    bool result = 1;
    
    int a,b,c=0;
    int sa,sb,sc;
    int e;
    int g=1;
    
    while (g){
        ++c;
        sc = c*c;
        a = 0;
        b = PYTHAG_SUM-a-c;
        while (a<b){
            sa = a*a;
            sb = b*b;
            if (sa+sb == sc){
                g=0;
                break;
            }
            ++a;
            b = PYTHAG_SUM-a-c;
        }
    }
    
    int p=a*b*c;
    
    printf("answer = %d, a=%d, b=%d, c=%d\n", p, a, b, c);
    result = (p == answer.product);
    
    return result;
}
#endif

