import shared
from pprint import pprint as pp
from collections import Counter


def run(orig):
    ox = grab(orig, 1, 0)
    co = grab(orig, 0, 1)
    return ox * co


def grab(orig, high, low):
    idx = 0
    while len(orig) != 1:
        matrix = _rot(orig)
        c = Counter(matrix[idx])
        if c[1] >= c[0]:
            orig = [o for o in orig if o[idx] == high]
        else:
            orig = [o for o in orig if o[idx] == low]
        idx += 1
    return int("".join(str(x) for x in orig[0]), 2)


def _rot(m):
    x = list(zip(*m[::-1]))
    return [list(reversed(y)) for y in x]


def main():
    spl = lambda y: [int(w) for w in y]
    with open(shared.get_fname(3), "r") as f:
        rows = [x.rstrip() for x in f.readlines()]
        matrix = [spl(x) for x in rows]
    print(run(matrix))


if __name__ == "__main__":
    main()
