#!/usr/bin/env python3 from useful import * m = np.asarray([[int(c) for c in l] for l in lines(open(0))]) def sight(y, x, m, line): return len(line) == 0 or np.all(m[y,x] > line) print(sum(any(sight(y, x, m, line) for line in [m[:y, x], m[y+1:, x], m[y, :x], m[y, x+1:]]) for (y, x), _ in np.ndenumerate(m))) def view(y, x, m, line): l = len(list(takewhile(lambda t: m[y,x] > t, line))) return l if l == len(line) else l + 1 def views(y, x, m): return [view(y, x, m, line) for line in [m[:y, x][::-1], m[y+1:, x], m[y, :x][::-1], m[y, x+1:]]] print(max([reduce(lambda a, b: a * b, views(y, x, m)) for (y, x), _ in np.ndenumerate(m)]))