#include <iostream>
#include <vector>
#include<stack>
using namespace std;
int find(vector<int> r)
{
int res=0;
stack<int> s;
r.push_back(0);
int i=0;
while(i<r.size())
{
if(s.empty()||r[i]>r[s.top()]){s.push(i); i++;}
else
{
int tmp = s.top();
s.pop();
res = max(res, r[tmp]*(s.empty()?i:i-s.top()-1));
}
}
return res;
}
int main() {
// your code goes here
/*
vector<int> r;
r.push_back(2);
r.push_back(1);
r.push_back(5);
r.push_back(6);
r.push_back(2);
r.push_back(3);
int res = find(r);
*/
vector<char> m;
m.push_back('0');
vector<vector<char> > matrix;
matrix.push_back(m);
int row = matrix.size();
if(row==0) return 0;
int col = matrix[0].size();
if(col==0) return 0;
vector<int> history, r;
int res(0);
for(int j=0; j<col; j++)
{
if(matrix[0][j]=='0'){history[j]=0;}
else{history[j]=1;}
}
res = max(res, find(history));
cout<<res<<endl;
for(int i=1; i<row; i++)
{
for(int j=0; j<col; j++)
{
if(matrix[i][j]=='0'){r[j]=0;}
else{r[j]=history[j]+1;}
}
res = max(res,find(r));
swap(history, r);
}
cout<<res<<endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZTxzdGFjaz4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKaW50IGZpbmQodmVjdG9yPGludD4gcikKewoKCWludCByZXM9MDsKICAgICAgICBzdGFjazxpbnQ+IHM7CiAgICAgICAgci5wdXNoX2JhY2soMCk7CiAgICAgICAgaW50IGk9MDsKICAgICAgICB3aGlsZShpPHIuc2l6ZSgpKQogICAgICAgIHsKICAgICAgICAgICAgaWYocy5lbXB0eSgpfHxyW2ldPnJbcy50b3AoKV0pe3MucHVzaChpKTsgaSsrO30KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpbnQgdG1wID0gcy50b3AoKTsKICAgICAgICAgICAgICAgIHMucG9wKCk7CiAgICAgICAgICAgICAgICByZXMgPSBtYXgocmVzLCByW3RtcF0qKHMuZW1wdHkoKT9pOmktcy50b3AoKS0xKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlczsKfQppbnQgbWFpbigpIHsKCS8vIHlvdXIgY29kZSBnb2VzIGhlcmUKCS8qCgl2ZWN0b3I8aW50PiByOyAKCXIucHVzaF9iYWNrKDIpOwoJci5wdXNoX2JhY2soMSk7CglyLnB1c2hfYmFjayg1KTsKCXIucHVzaF9iYWNrKDYpOwoJci5wdXNoX2JhY2soMik7CglyLnB1c2hfYmFjaygzKTsKCWludCByZXMgPSBmaW5kKHIpOwoJKi8KCXZlY3RvcjxjaGFyPiBtOyAKCW0ucHVzaF9iYWNrKCcwJyk7Cgl2ZWN0b3I8dmVjdG9yPGNoYXI+ID4gbWF0cml4OwoJbWF0cml4LnB1c2hfYmFjayhtKTsKCWludCByb3cgPSBtYXRyaXguc2l6ZSgpOwogICAgICAgIGlmKHJvdz09MCkgcmV0dXJuIDA7CiAgICAgICAgaW50IGNvbCA9IG1hdHJpeFswXS5zaXplKCk7CiAgICAgICAgaWYoY29sPT0wKSByZXR1cm4gMDsKICAgICAgICB2ZWN0b3I8aW50PiBoaXN0b3J5LCByOwogICAgICAgIGludCByZXMoMCk7CiAgICAgICAgZm9yKGludCBqPTA7IGo8Y29sOyBqKyspCiAgICAgICAgewogICAgICAgICAgICBpZihtYXRyaXhbMF1bal09PScwJyl7aGlzdG9yeVtqXT0wO30KICAgICAgICAgICAgZWxzZXtoaXN0b3J5W2pdPTE7fQogICAgICAgIH0KICAgICAgICByZXMgPSBtYXgocmVzLCBmaW5kKGhpc3RvcnkpKTsKICAgICAgICBjb3V0PDxyZXM8PGVuZGw7CiAgICAgICAgZm9yKGludCBpPTE7IGk8cm93OyBpKyspCiAgICAgICAgewogICAgICAgICAgICBmb3IoaW50IGo9MDsgajxjb2w7IGorKykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYobWF0cml4W2ldW2pdPT0nMCcpe3Jbal09MDt9CiAgICAgICAgICAgICAgICBlbHNle3Jbal09aGlzdG9yeVtqXSsxO30KICAgICAgICAgICAgfQogICAgICAgICAgICByZXMgPSBtYXgocmVzLGZpbmQocikpOwogICAgICAgICAgICBzd2FwKGhpc3RvcnksIHIpOwogICAgICAgIH0KCWNvdXQ8PHJlczw8ZW5kbDsKCQoJcmV0dXJuIDA7Cn0=