Language: C++

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;

class B {
    static StreamWriter Out = new StreamWriter(Console.OpenStandardOutput()) { AutoFlush = false };
    static void Main(string[] args) {
        long H, W;
        Input(out H, out W);
        if(H % 2 == 1 && W % 2 == 1) {
            Print(H * W / 2 + 1);
        } else {
            Print(H * W / 2);
        }
        
        Out.Flush();
    }
    static T ChangeT<T>(string s) => (T)Convert.ChangeType(s, typeof(T));
    static void Input<A>(out A a) {
        var words = Console.ReadLine().Split(new[] { ' ' }, options: StringSplitOptions.RemoveEmptyEntries);
        a = ChangeT<A>(words[0]);
    }
    static void Input<A, B>(out A a, out B b) {
        var words = Console.ReadLine().Split(new[] { ' ' }, options: StringSplitOptions.RemoveEmptyEntries);
        a = ChangeT<A>(words[0]);
        b = ChangeT<B>(words[1]);
    }
    static void Input<A, B, C>(out A a, out B b, out C c) {
        var words = Console.ReadLine().Split(new[] { ' ' }, options: StringSplitOptions.RemoveEmptyEntries);
        a = ChangeT<A>(words[0]);
        b = ChangeT<B>(words[1]);
        c = ChangeT<C>(words[2]);
    }
    static void Input<A, B, C, D>(out A a, out B b, out C c, out D d) {
        var words = Console.ReadLine().Split(new[] { ' ' }, options: StringSplitOptions.RemoveEmptyEntries);
        a = ChangeT<A>(words[0]);
        b = ChangeT<B>(words[1]);
        c = ChangeT<C>(words[2]);
        d = ChangeT<D>(words[3]);
    }
    static void Input<A, B, C, D, E>(out A a, out B b, out C c, out D d, out E e) {
        var words = Console.ReadLine().Split(new[] { ' ' }, options: StringSplitOptions.RemoveEmptyEntries);
        a = ChangeT<A>(words[0]);
        b = ChangeT<B>(words[1]);
        c = ChangeT<C>(words[2]);
        d = ChangeT<D>(words[3]);
        e = ChangeT<E>(words[4]);
    }
    static void Input<A, B, C, D, E, F>(out A a, out B b, out C c, out D d, out E e, out F f) {
        var words = Console.ReadLine().Split(new[] { ' ' }, options: StringSplitOptions.RemoveEmptyEntries);
        a = ChangeT<A>(words[0]);
        b = ChangeT<B>(words[1]);
        c = ChangeT<C>(words[2]);
        d = ChangeT<D>(words[3]);
        e = ChangeT<E>(words[4]);
        f = ChangeT<F>(words[5]);
    }
    static void Inputs<T>(out T[] array) {
        array = Console.ReadLine().Split(new[] { ' ' }, options: StringSplitOptions.RemoveEmptyEntries).Select(s => ChangeT<T>(s)).ToArray();
    }
    static void Print<T>(T s) => Out.WriteLine(s);
    static void Print<T>(params T[] s) => Out.WriteLine(string.Join(" ", s));
    static void Print<T>(IEnumerable<T> e) => Out.WriteLine(string.Join(" ", e));
}

Compiler output:
a.cc:1:7: error: expected nested-name-specifier before 'System'
    1 | using System;
      |       ^~~~~~
a.cc:2:7: error: expected nested-name-specifier before 'System'
    2 | using System.Collections.Generic;
      |       ^~~~~~
a.cc:3:7: error: expected nested-name-specifier before 'System'
    3 | using System.IO;
      |       ^~~~~~
a.cc:4:7: error: expected nested-name-specifier before 'System'
    4 | using System.Linq;
      |       ^~~~~~
a.cc:7:12: error: 'StreamWriter' does not name a type
    7 |     static StreamWriter Out = new StreamWriter(Console.OpenStandardOutput()) { AutoFlush = false };
      |            ^~~~~~~~~~~~
a.cc:8:22: error: 'string' has not been declared
    8 |     static void Main(string[] args) {
      |                      ^~~~~~
a.cc:8:31: error: expected ',' or '...' before 'args'
    8 |     static void Main(string[] args) {
      |                               ^~~~
a.cc:19:12: error: 'T' does not name a type
   19 |     static T ChangeT<T>(string s) => (T)Convert.ChangeType(s, typeof(T));
      |            ^
a.cc:20:17: error: variable or field 'Input' declared void
   20 |     static void Input<A>(out A a) {
      |                 ^~~~~
a.cc:20:17: error: expected ';' at end of member declaration
   20 |     static void Input<A>(out A a) {
      |                 ^~~~~
      |                      ;
a.cc:20:22: error: expected unqualified-id before '<' token
   20 |     static void Input<A>(out A a) {
      |                      ^
a.cc:24:17: error: variable or field 'Input' declared void
   24 |     static void Input<A, B>(out A a, out B b) {
      |                 ^~~~~
a.cc:24:17: error: expected ';' at end of member declaration
   24 |     static void Input<A, B>(out A a, out B b) {
      |                 ^~~~~
      |                      ;
a.cc:24:22: error: expected unqualified-id before '<' token
   24 |     static void Input<A, B>(out A a, out B b) {
      |                      ^
a.cc:29:17: error: variable or field 'Input' declared void
   29 |     static void Input<A, B, C>(out A a, out B b, out C c) {
      |                 ^~~~~
a.cc:29:17: error: expected ';' at end of member declaration
   29 |     static void Input<A, B, C>(out A a, out B b, out C c) {
      |                 ^~~~~
      |                      ;
a.cc:29:22: error: expected unqualified-id before '<' token
   29 |     static void Input<A, B, C>(out A a, out B b, out C c) {
      |                      ^
a.cc:35:17: error: variable or field 'Input' declared void
   35 |     static void Input<A, B, C, D>(out A a, out B b, out C c, out D d) {
      |                 ^~~~~
a.cc:35:17: error: expected ';' at end of member declaration
   35 |     static void Input<A, B, C, D>(out A a, out B b, out C c, out D d) {
      |                 ^~~~~
      |                      ;
a.cc:35:22: error: expected unqualified-id before '<' token
   35 |     static void Input<A, B, C, D>(out A a, out B b, out C c, out D d) {
      |                      ^
a.cc:42:17: error: variable or field 'Input' declared void
   42 |     static void Input<A, B, C, D, E>(out A a, out B b, out C c, out D d, out E e) {
      |                 ^~~~~
a.cc:42:17: error: expected ';' at end of member declaration
   42 |     static void Input<A, B, C, D, E>(out A a, out B b, out C c, out D d, out E e) {
      |                 ^~~~~
      |                      ;
a.cc:42:22: error: expected unqualified-id before '<' token
   42 |     static void Input<A, B, C, D, E>(out A a, out B b, out C c, out D d, out E e) {
      |                      ^
a.cc:50:17: error: variable or field 'Input' declared void
   50 |     static void Input<A, B, C, D, E, F>(out A a, out B b, out C c, out D d, out E e, out F f) {
      |                 ^~~~~
a.cc:50:17: error: expected ';' at end of member declaration
   50 |     static void Input<A, B, C, D, E, F>(out A a, out B b, out C c, out D d, out E e, out F f) {
      |                 ^~~~~
      |                      ;
a.cc:50:22: error: expected unqualified-id before '<' token
   50 |     static void Input<A, B, C, D, E, F>(out A a, out B b, out C c, out D d, out E e, out F f) {
      |                      ^
a.cc:59:17: error: variable or field 'Inputs' declared void
   59 |     static void Inputs<T>(out T[] array) {
      |                 ^~~~~~
a.cc:59:17: error: expected ';' at end of member declaration
   59 |     static void Inputs<T>(out T[] array) {
      |                 ^~~~~~
      |                       ;
a.cc:59:23: error: expected unqualified-id before '<' token
   59 |     static void Inputs<T>(out T[] array) {
      |                       ^
a.cc:62:17: error: variable or field 'Print' declared void
   62 |     static void Print<T>(T s) => Out.WriteLine(s);
      |                 ^~~~~
a.cc:62:17: error: expected ';' at end of member declaration
   62 |     static void Print<T>(T s) => Out.WriteLine(s);
      |                 ^~~~~
      |                      ;
a.cc:62:22: error: expected unqualified-id before '<' token
   62 |     static void Print<T>(T s) => Out.WriteLine(s);
      |                      ^
a.cc:63:17: error: variable or field 'Print' declared void
   63 |     static void Print<T>(params T[] s) => Out.WriteLine(string.Join(" ", s));
      |                 ^~~~~
a.cc:63:17: error: expected ';' at end of member declaration
   63 |     static void Print<T>(params T[] s) => Out.WriteLine(string.Join(" ", s));
      |                 ^~~~~
      |                      ;
a.cc:63:22: error: expected unqualified-id before '<' token
   63 |     static void Print<T>(params T[] s) => Out.WriteLine(string.Join(" ", s));
      |                      ^
a.cc:64:17: error: variable or field 'Print' declared void
   64 |     static void Print<T>(IEnumerable<T> e) => Out.WriteLine(string.Join(" ", e));
      |                 ^~~~~
a.cc:64:17: error: expected ';' at end of member declaration
   64 |     static void Print<T>(IEnumerable<T> e) => Out.WriteLine(string.Join(" ", e));
      |                 ^~~~~
      |                      ;
a.cc:64:22: error: expected unqualified-id before '<' token
   64 |     static void Print<T>(IEnumerable<T> e) => Out.WriteLine(string.Join(" ", e));
      |                      ^
a.cc:65:2: error: expected ';' after class definition
   65 | }
      |  ^
      |  ;
a.cc: In static member function 'static void B::Main(int*)':
a.cc:10:15: error: 'out' was not declared in this scope
   10 |         Input(out H, out W);
      |               ^~~
a.cc:10:26: error: expected ')' before 'W'
   10 |         Input(out H, out W);
      |                          ^
a.cc:10:14: note: to match this '('
   10 |         Input(out H, out W);
      |              ^
a.cc:10:9: error: 'Input' was not declared in this scope
   10 |         Input(out H, out W);
      |         ^~~~~
a.cc:12:13: error: 'Print' was not declared in this scope; did you mean 'int'?
   12 |             Print(H * W / 2 + 1);
      |             ^~~~~
      |             int
a.cc:14:13: error: 'Print' was not declared in this scope; did you mean 'int'?
   14 |             Print(H * W / 2);
      |             ^~~~~
      |             int
a.cc:17:9: error: 'Out' was not declared in this scope
   17 |         Out.Flush();
      |         ^~~