def largest_rectangle(hs):
stack = []
i = m = 0
while i < len(hs) or stack:
if i == len(hs) or (stack and hs[stack[-1]] > hs[i]):
h = hs[stack.pop()]
s = 0 if not stack else stack[-1] + 1
x = min(h, i - s)
m = max(m, x * x)
continue
stack.append(i)
i += 1
return m
inp = """X--X-
-----
-----
-----
---X-"""
grid = list(map(list, inp.split('\n')))
r = [0 for _ in grid[0]]
largest = 0
for row in grid:
r = [(1 + h) if el == '-' else 0 for h, el in zip(r, row)]
largest = max(largest, largest_rectangle(r))
print(largest)
ZGVmIGxhcmdlc3RfcmVjdGFuZ2xlKGhzKToKICAgIHN0YWNrID0gW10KICAgIGkgPSBtID0gMAoKICAgIHdoaWxlIGkgPCBsZW4oaHMpIG9yIHN0YWNrOgogICAgICAgIGlmIGkgPT0gbGVuKGhzKSBvciAoc3RhY2sgYW5kIGhzW3N0YWNrWy0xXV0gPiBoc1tpXSk6CiAgICAgICAgICAgIGggPSBoc1tzdGFjay5wb3AoKV0KICAgICAgICAgICAgcyA9IDAgaWYgbm90IHN0YWNrIGVsc2Ugc3RhY2tbLTFdICsgMQogICAgICAgICAgICB4ID0gbWluKGgsIGkgLSBzKQogICAgICAgICAgICBtID0gbWF4KG0sIHggKiB4KQogICAgICAgICAgICBjb250aW51ZQogICAgICAgIHN0YWNrLmFwcGVuZChpKQogICAgICAgIGkgKz0gMQogICAgcmV0dXJuIG0KCmlucCA9ICIiIlgtLVgtCi0tLS0tCi0tLS0tCi0tLS0tCi0tLVgtIiIiCgpncmlkID0gbGlzdChtYXAobGlzdCwgaW5wLnNwbGl0KCdcbicpKSkKciA9IFswIGZvciBfIGluIGdyaWRbMF1dCmxhcmdlc3QgPSAwCmZvciByb3cgaW4gZ3JpZDoKICAgIHIgPSBbKDEgKyBoKSBpZiBlbCA9PSAnLScgZWxzZSAwIGZvciBoLCBlbCBpbiB6aXAociwgcm93KV0KICAgIGxhcmdlc3QgPSBtYXgobGFyZ2VzdCwgbGFyZ2VzdF9yZWN0YW5nbGUocikpCgpwcmludChsYXJnZXN0KQo=