Problem:
Score : 300 points

Problem Statement

There is a rectangle in a coordinate plane. The coordinates of the four vertices are (0,0), (W,0), (W,H), and (0,H).
You are given a point (x,y) which is within the rectangle or on its border. We will draw a straight line passing through (x,y) to cut the rectangle into two parts. Find the maximum possible area of the part whose area is not larger than that of the other. Additionally, determine if there are multiple ways to cut the rectangle and achieve that maximum.

Constraints

1 \leq W,H \leq 10^9

0\leq x\leq W

0\leq y\leq H

All values in input are integers.

Input

Input is given from Standard Input in the following format:

W H x y

Output

Print the maximum possible area of the part whose area is not larger than that of the other, followed by 1 if there are multiple ways to cut the rectangle and achieve that maximum, and 0 otherwise.

The area printed will be judged correct when its absolute or relative error is at most 10^{-9}.

Sample Input 1

2 3 1 2

Sample Output 1

3.000000 0

The line x=1 gives the optimal cut, and no other line does.

Sample Input 2

2 2 1 1

Sample Output 2

2.000000 1

Solution in C++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <fstream>
#include <iostream>
#include <algorithm>
#include <bitset>
#include <array>
#include <vector>
#include <queue>
#include <set>
#include <cmath> // 変数名にy1が使えなくなるかも…。
#include <map>
#include <unordered_map>
#include <unordered_set>
#include <string>

typedef __int128_t int128_t;
std::istream &operator>>(std::istream& input, int128_t& value) { // int128_tの入力。入力が64bitに収まる前提。
    long long tmp; input >> tmp; value = tmp;
    return input;
}
std::ostream &operator<<(std::ostream& output, const int128_t value) { // int128_tの出力。出力が64bitに収まる前提。
    output << (long long)value;
    return output;
}

int128_t W, H, x, y;

int main(int argc, char **argv) {
    std::cin >> W >> H >> x >> y;
    
    int128_t size = W * H;

    int128_t s1 = H * x;
    int128_t s2 = H * (W - x);

    int128_t s3 = W * y;
    int128_t s4 = W * (H - y);

    int128_t c1 = std::min(s1, s2);
    int128_t c2 = std::min(s3, s4);

    int128_t ret1, ret2;
    if (s1 == 0 || s2 == 0 || s3 == 0 || s4 == 0) {
        if (s1 == 0 || s2 == 0) {
            ret1 = c2;
        } else {
            ret1 = c1;
        }
        ret2 = 0;
    } else {
        ret1 = std::max(c1, c2);
        ret2 = (c1 == c2) ? 1 : 0;
    }

    std::cout << ret1 << " " << ret2 << std::endl;
 


    return 0;
}