import java.util.Scanner;


public class Main {

    public static String Y = "Yes";
    public static String N = "No";
    public static String I = "IMPOSSIBLE";
    public static String B = "Bad";
    public static String G = "Good";
    public static long MOD = (long) (Math.pow(10, 9) + 7);
    public static Scanner sc = new Scanner(System.in);

    public static void main(String[] args) {

        long w = nl();
        long h = nl();

        long x = nl();
        long y = nl();

        outn(w * h * 0.5);

        if (x * 2 == w && y * 2 == h) {
            out(" " + 1);
        } else {
            out(" " + 0);
        }
    }

    /*
     * 以下メソッド集
     */
    static int ni() {

        return sc.nextInt();
    }

    static long nl() {

        return sc.nextLong();
    }

    static String n() {

        return sc.next();
    }

    static char[] nc() {

        return sc.next().toCharArray();
    }

    static int kaijo(int n) {

        if (n == 0 || n == 1) {
            return 1;
        } else {
            return n * kaijo(n - 1);
        }
    }

    static int fib(int n) {

        return (n == 1 || n == 0) ? n : fib(n - 2) + fib(n - 1);
    }

    static long lcm(long m, long n) {

        return m * n / gcd(m, n);
    }

    static int lcm(int m, int n) {

        return m * n / gcd(m, n);
    }

    static long gcd(long a, long b) {

        return (b == 0) ? a : gcd(b, a % b);
    }

    static int gcd(int a, int b) {

        return (b == 0) ? a : gcd(b, a % b);
    }

    static void out(String info) {

        System.out.println(info);
    }

    static void out(int info) {

        System.out.println(info);
    }

    static void out(double info) {

        System.out.println(info);
    }

    static void out(long info) {

        System.out.println(info);
    }

    static void out(char info) {

        System.out.println(info);
    }

    static void outn(String info) {

        System.out.print(info);
    }

    static void outn(int info) {

        System.out.print(info);
    }

    static void outn(double info) {

        System.out.print(info);
    }

    static void outn(long info) {

        System.out.print(info);
    }

    static void outn(char info) {

        System.out.print(info);
    }

    static int max(int a, int b) {

        return Math.max(a, b);
    }

    static long max(long a, long b) {

        return Math.max(a, b);
    }

    static int min(int a, int b) {

        return Math.min(a, b);
    }

    static long min(long a, long b) {

        return Math.min(a, b);
    }
} import java.util.Scanner; Scanner java.util public class Main {

    public static String Y = "Yes";
    public static String N = "No";
    public static String I = "IMPOSSIBLE";
    public static String B = "Bad";
    public static String G = "Good";
    public static long MOD = (long) (Math.pow(10, 9) + 7);
    public static Scanner sc = new Scanner(System.in);

    public static void main(String[] args) {

        long w = nl();
        long h = nl();

        long x = nl();
        long y = nl();

        outn(w * h * 0.5);

        if (x * 2 == w && y * 2 == h) {
            out(" " + 1);
        } else {
            out(" " + 0);
        }
    }

    /*
     * 以下メソッド集
     */
    static int ni() {

        return sc.nextInt();
    }

    static long nl() {

        return sc.nextLong();
    }

    static String n() {

        return sc.next();
    }

    static char[] nc() {

        return sc.next().toCharArray();
    }

    static int kaijo(int n) {

        if (n == 0 || n == 1) {
            return 1;
        } else {
            return n * kaijo(n - 1);
        }
    }

    static int fib(int n) {

        return (n == 1 || n == 0) ? n : fib(n - 2) + fib(n - 1);
    }

    static long lcm(long m, long n) {

        return m * n / gcd(m, n);
    }

    static int lcm(int m, int n) {

        return m * n / gcd(m, n);
    }

    static long gcd(long a, long b) {

        return (b == 0) ? a : gcd(b, a % b);
    }

    static int gcd(int a, int b) {

        return (b == 0) ? a : gcd(b, a % b);
    }

    static void out(String info) {

        System.out.println(info);
    }

    static void out(int info) {

        System.out.println(info);
    }

    static void out(double info) {

        System.out.println(info);
    }

    static void out(long info) {

        System.out.println(info);
    }

    static void out(char info) {

        System.out.println(info);
    }

    static void outn(String info) {

        System.out.print(info);
    }

    static void outn(int info) {

        System.out.print(info);
    }

    static void outn(double info) {

        System.out.print(info);
    }

    static void outn(long info) {

        System.out.print(info);
    }

    static void outn(char info) {

        System.out.print(info);
    }

    static int max(int a, int b) {

        return Math.max(a, b);
    }

    static long max(long a, long b) {

        return Math.max(a, b);
    }

    static int min(int a, int b) {

        return Math.min(a, b);
    }

    static long min(long a, long b) {

        return Math.min(a, b);
    }
} Main public static String Y = "Yes"; Y "Yes" public static String N = "No"; N "No" public static String I = "IMPOSSIBLE"; I "IMPOSSIBLE" public static String B = "Bad"; B "Bad" public static String G = "Good"; G "Good" public static long MOD = (long) (Math.pow(10, 9) + 7); MOD (long) (Math.pow(10, 9) + 7) Math.pow(10, 9) Math.pow Math 10 9 7 public static Scanner sc = new Scanner(System.in); sc new Scanner(System.in) public static void main(String[] args) {

        long w = nl();
        long h = nl();

        long x = nl();
        long y = nl();

        outn(w * h * 0.5);

        if (x * 2 == w && y * 2 == h) {
            out(" " + 1);
        } else {
            out(" " + 0);
        }
    } main {

        long w = nl();
        long h = nl();

        long x = nl();
        long y = nl();

        outn(w * h * 0.5);

        if (x * 2 == w && y * 2 == h) {
            out(" " + 1);
        } else {
            out(" " + 0);
        }
    } long w = nl(); w nl() nl long h = nl(); h nl() nl long x = nl(); x nl() nl long y = nl(); y nl() nl outn(w * h * 0.5) outn w * h * 0.5 w * h * 0.5 w h 0.5 if (x * 2 == w && y * 2 == h) {
            out(" " + 1);
        } else {
            out(" " + 0);
        } x * 2 == w && y * 2 == h x * 2 == w x * 2 x 2 w y * 2 == h y * 2 y 2 h {
            out(" " + 1);
        } out(" " + 1) out " " + 1 " " 1 {
            out(" " + 0);
        } out(" " + 0) out " " + 0 " " 0 String[] args args /*
     * 以下メソッド集
     */
    static int ni() {

        return sc.nextInt();
    } ni {

        return sc.nextInt();
    } return sc.nextInt(); sc.nextInt() sc.nextInt sc static long nl() {

        return sc.nextLong();
    } nl {

        return sc.nextLong();
    } return sc.nextLong(); sc.nextLong() sc.nextLong sc static String n() {

        return sc.next();
    } n {

        return sc.next();
    } return sc.next(); sc.next() sc.next sc static char[] nc() {

        return sc.next().toCharArray();
    } nc {

        return sc.next().toCharArray();
    } return sc.next().toCharArray(); sc.next().toCharArray() sc.next().toCharArray sc.next() sc.next sc static int kaijo(int n) {

        if (n == 0 || n == 1) {
            return 1;
        } else {
            return n * kaijo(n - 1);
        }
    } kaijo {

        if (n == 0 || n == 1) {
            return 1;
        } else {
            return n * kaijo(n - 1);
        }
    } if (n == 0 || n == 1) {
            return 1;
        } else {
            return n * kaijo(n - 1);
        } n == 0 || n == 1 n == 0 n 0 n == 1 n 1 {
            return 1;
        } return 1; 1 {
            return n * kaijo(n - 1);
        } return n * kaijo(n - 1); n * kaijo(n - 1) n kaijo(n - 1) kaijo n - 1 n 1 int n n static int fib(int n) {

        return (n == 1 || n == 0) ? n : fib(n - 2) + fib(n - 1);
    } fib {

        return (n == 1 || n == 0) ? n : fib(n - 2) + fib(n - 1);
    } return (n == 1 || n == 0) ? n : fib(n - 2) + fib(n - 1); (n == 1 || n == 0) ? n : fib(n - 2) + fib(n - 1) (n == 1 || n == 0) n == 1 n 1 n == 0 n 0 n fib(n - 2) + fib(n - 1) fib(n - 2) fib n - 2 n 2 fib(n - 1) fib n - 1 n 1 int n n static long lcm(long m, long n) {

        return m * n / gcd(m, n);
    } lcm {

        return m * n / gcd(m, n);
    } return m * n / gcd(m, n); m * n / gcd(m, n) m * n m n gcd(m, n) gcd m n long m m long n n static int lcm(int m, int n) {

        return m * n / gcd(m, n);
    } lcm {

        return m * n / gcd(m, n);
    } return m * n / gcd(m, n); m * n / gcd(m, n) m * n m n gcd(m, n) gcd m n int m m int n n static long gcd(long a, long b) {

        return (b == 0) ? a : gcd(b, a % b);
    } gcd {

        return (b == 0) ? a : gcd(b, a % b);
    } return (b == 0) ? a : gcd(b, a % b); (b == 0) ? a : gcd(b, a % b) (b == 0) b 0 a gcd(b, a % b) gcd b a % b a b long a a long b b static int gcd(int a, int b) {

        return (b == 0) ? a : gcd(b, a % b);
    } gcd {

        return (b == 0) ? a : gcd(b, a % b);
    } return (b == 0) ? a : gcd(b, a % b); (b == 0) ? a : gcd(b, a % b) (b == 0) b 0 a gcd(b, a % b) gcd b a % b a b int a a int b b static void out(String info) {

        System.out.println(info);
    } out {

        System.out.println(info);
    } System.out.println(info) System.out.println System.out System System.out info String info info static void out(int info) {

        System.out.println(info);
    } out {

        System.out.println(info);
    } System.out.println(info) System.out.println System.out System System.out info int info info static void out(double info) {

        System.out.println(info);
    } out {

        System.out.println(info);
    } System.out.println(info) System.out.println System.out System System.out info double info info static void out(long info) {

        System.out.println(info);
    } out {

        System.out.println(info);
    } System.out.println(info) System.out.println System.out System System.out info long info info static void out(char info) {

        System.out.println(info);
    } out {

        System.out.println(info);
    } System.out.println(info) System.out.println System.out System System.out info char info info static void outn(String info) {

        System.out.print(info);
    } outn {

        System.out.print(info);
    } System.out.print(info) System.out.print System.out System System.out info String info info static void outn(int info) {

        System.out.print(info);
    } outn {

        System.out.print(info);
    } System.out.print(info) System.out.print System.out System System.out info int info info static void outn(double info) {

        System.out.print(info);
    } outn {

        System.out.print(info);
    } System.out.print(info) System.out.print System.out System System.out info double info info static void outn(long info) {

        System.out.print(info);
    } outn {

        System.out.print(info);
    } System.out.print(info) System.out.print System.out System System.out info long info info static void outn(char info) {

        System.out.print(info);
    } outn {

        System.out.print(info);
    } System.out.print(info) System.out.print System.out System System.out info char info info static int max(int a, int b) {

        return Math.max(a, b);
    } max {

        return Math.max(a, b);
    } return Math.max(a, b); Math.max(a, b) Math.max Math a b int a a int b b static long max(long a, long b) {

        return Math.max(a, b);
    } max {

        return Math.max(a, b);
    } return Math.max(a, b); Math.max(a, b) Math.max Math a b long a a long b b static int min(int a, int b) {

        return Math.min(a, b);
    } min {

        return Math.min(a, b);
    } return Math.min(a, b); Math.min(a, b) Math.min Math a b int a a int b b static long min(long a, long b) {

        return Math.min(a, b);
    } min {

        return Math.min(a, b);
    } return Math.min(a, b); Math.min(a, b) Math.min Math a b long a a long b b public class Main {

    public static String Y = "Yes";
    public static String N = "No";
    public static String I = "IMPOSSIBLE";
    public static String B = "Bad";
    public static String G = "Good";
    public static long MOD = (long) (Math.pow(10, 9) + 7);
    public static Scanner sc = new Scanner(System.in);

    public static void main(String[] args) {

        long w = nl();
        long h = nl();

        long x = nl();
        long y = nl();

        outn(w * h * 0.5);

        if (x * 2 == w && y * 2 == h) {
            out(" " + 1);
        } else {
            out(" " + 0);
        }
    }

    /*
     * 以下メソッド集
     */
    static int ni() {

        return sc.nextInt();
    }

    static long nl() {

        return sc.nextLong();
    }

    static String n() {

        return sc.next();
    }

    static char[] nc() {

        return sc.next().toCharArray();
    }

    static int kaijo(int n) {

        if (n == 0 || n == 1) {
            return 1;
        } else {
            return n * kaijo(n - 1);
        }
    }

    static int fib(int n) {

        return (n == 1 || n == 0) ? n : fib(n - 2) + fib(n - 1);
    }

    static long lcm(long m, long n) {

        return m * n / gcd(m, n);
    }

    static int lcm(int m, int n) {

        return m * n / gcd(m, n);
    }

    static long gcd(long a, long b) {

        return (b == 0) ? a : gcd(b, a % b);
    }

    static int gcd(int a, int b) {

        return (b == 0) ? a : gcd(b, a % b);
    }

    static void out(String info) {

        System.out.println(info);
    }

    static void out(int info) {

        System.out.println(info);
    }

    static void out(double info) {

        System.out.println(info);
    }

    static void out(long info) {

        System.out.println(info);
    }

    static void out(char info) {

        System.out.println(info);
    }

    static void outn(String info) {

        System.out.print(info);
    }

    static void outn(int info) {

        System.out.print(info);
    }

    static void outn(double info) {

        System.out.print(info);
    }

    static void outn(long info) {

        System.out.print(info);
    }

    static void outn(char info) {

        System.out.print(info);
    }

    static int max(int a, int b) {

        return Math.max(a, b);
    }

    static long max(long a, long b) {

        return Math.max(a, b);
    }

    static int min(int a, int b) {

        return Math.min(a, b);
    }

    static long min(long a, long b) {

        return Math.min(a, b);
    }
} public class Main {

    public static String Y = "Yes";
    public static String N = "No";
    public static String I = "IMPOSSIBLE";
    public static String B = "Bad";
    public static String G = "Good";
    public static long MOD = (long) (Math.pow(10, 9) + 7);
    public static Scanner sc = new Scanner(System.in);

    public static void main(String[] args) {

        long w = nl();
        long h = nl();

        long x = nl();
        long y = nl();

        outn(w * h * 0.5);

        if (x * 2 == w && y * 2 == h) {
            out(" " + 1);
        } else {
            out(" " + 0);
        }
    }

    /*
     * 以下メソッド集
     */
    static int ni() {

        return sc.nextInt();
    }

    static long nl() {

        return sc.nextLong();
    }

    static String n() {

        return sc.next();
    }

    static char[] nc() {

        return sc.next().toCharArray();
    }

    static int kaijo(int n) {

        if (n == 0 || n == 1) {
            return 1;
        } else {
            return n * kaijo(n - 1);
        }
    }

    static int fib(int n) {

        return (n == 1 || n == 0) ? n : fib(n - 2) + fib(n - 1);
    }

    static long lcm(long m, long n) {

        return m * n / gcd(m, n);
    }

    static int lcm(int m, int n) {

        return m * n / gcd(m, n);
    }

    static long gcd(long a, long b) {

        return (b == 0) ? a : gcd(b, a % b);
    }

    static int gcd(int a, int b) {

        return (b == 0) ? a : gcd(b, a % b);
    }

    static void out(String info) {

        System.out.println(info);
    }

    static void out(int info) {

        System.out.println(info);
    }

    static void out(double info) {

        System.out.println(info);
    }

    static void out(long info) {

        System.out.println(info);
    }

    static void out(char info) {

        System.out.println(info);
    }

    static void outn(String info) {

        System.out.print(info);
    }

    static void outn(int info) {

        System.out.print(info);
    }

    static void outn(double info) {

        System.out.print(info);
    }

    static void outn(long info) {

        System.out.print(info);
    }

    static void outn(char info) {

        System.out.print(info);
    }

    static int max(int a, int b) {

        return Math.max(a, b);
    }

    static long max(long a, long b) {

        return Math.max(a, b);
    }

    static int min(int a, int b) {

        return Math.min(a, b);
    }

    static long min(long a, long b) {

        return Math.min(a, b);
    }
} Main
import java.util.Scanner;


public class Main {

    public static String Y = "Yes";
    public static String N = "No";
    public static String I = "IMPOSSIBLE";
    public static String B = "Bad";
    public static String G = "Good";
    public static long MOD = (long) (Math.pow(10, 9) + 7);
    public static Scanner sc = new Scanner(System.in);

    public static void main(String[] args) {

        long w = nl();
        long h = nl();

        long x = nl();
        long y = nl();

        outn(w * h * 0.5);

        if (x * 2 == w && y * 2 == h) {
            out(" " + 1);
        } else {
            out(" " + 0);
        }
    }

    /*
     * 以下メソッド集
     */
    static int ni() {

        return sc.nextInt();
    }

    static long nl() {

        return sc.nextLong();
    }

    static String n() {

        return sc.next();
    }

    static char[] nc() {

        return sc.next().toCharArray();
    }

    static int kaijo(int n) {

        if (n == 0 || n == 1) {
            return 1;
        } else {
            return n * kaijo(n - 1);
        }
    }

    static int fib(int n) {

        return (n == 1 || n == 0) ? n : fib(n - 2) + fib(n - 1);
    }

    static long lcm(long m, long n) {

        return m * n / gcd(m, n);
    }

    static int lcm(int m, int n) {

        return m * n / gcd(m, n);
    }

    static long gcd(long a, long b) {

        return (b == 0) ? a : gcd(b, a % b);
    }

    static int gcd(int a, int b) {

        return (b == 0) ? a : gcd(b, a % b);
    }

    static void out(String info) {

        System.out.println(info);
    }

    static void out(int info) {

        System.out.println(info);
    }

    static void out(double info) {

        System.out.println(info);
    }

    static void out(long info) {

        System.out.println(info);
    }

    static void out(char info) {

        System.out.println(info);
    }

    static void outn(String info) {

        System.out.print(info);
    }

    static void outn(int info) {

        System.out.print(info);
    }

    static void outn(double info) {

        System.out.print(info);
    }

    static void outn(long info) {

        System.out.print(info);
    }

    static void outn(char info) {

        System.out.print(info);
    }

    static int max(int a, int b) {

        return Math.max(a, b);
    }

    static long max(long a, long b) {

        return Math.max(a, b);
    }

    static int min(int a, int b) {

        return Math.min(a, b);
    }

    static long min(long a, long b) {

        return Math.min(a, b);
    }
}
