#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
void maximum(int & a, int b) { a = max(a, b); }
vector<ll> candidate[2][2];
int n;
vector<int> solution;
vector<vector<vector<int>>> rectangles;
void extend(int first_line, int second_line, int score);
void go_from(int first_line, int second_line, int so_far);
int main()
{
scanf("%d", &n);
solution.resize(n + 1, 0);
rectangles.resize(n + 1);
vector< vector<ll> > in(2, vector<ll>(n));
for(vector<ll> & row : in)
for(int index = 0; index < n; ++index)
{
scanf("%lld", &row[index]);
if(index) row[index] += row[index-1]; // prefix sums
}
for(int index0 = 0; index0 <= 1; ++index0)
for(int index1 = index0; index1 <= 1; ++index1)
{
candidate[index0][index1].resize(n, -1);
map<ll, int> next_occurrence;
for(int where = n - 1; where >= 0; --where)
{
ll new_value = 0;
for(int index = index0; index <= index1; ++index)
new_value += in[index][where];
next_occurrence[new_value] = where;
ll need = 0;
if(where != 0)
for(int index = index0; index <= index1; ++index)
need += in[index][where-1];
if(next_occurrence.count(need))
candidate[index0][index1][where] = next_occurrence[need];
}
}
for(int where = 0; where < n; ++where)
{
int so_far = solution[where];
go_from(where, where, so_far);
auto minimum = [&] (int & a, int b)
{
if(a == -1 || b < a) a = b;
};
int how_far_up = -1, how_far_down = -1;
for(const vector<int> & rect : rectangles[where])
{
if(rect[1] == where && rect[2] == so_far + 1)
minimum(how_far_up, rect[0]);
if(rect[0] == where && rect[2] == so_far + 1)
minimum(how_far_down, rect[1]);
}
if(how_far_up != -1)
go_from(how_far_up, where, so_far + 1);
if(how_far_down != -1)
go_from(where, how_far_down, so_far + 1);
}
printf("%d\n", solution[n]);
}
void extend(int first_line, int second_line, int score)
{
maximum(solution[max(first_line, second_line)], score);
rectangles[min(first_line, second_line)].push_back(vector<int>{first_line, second_line, score});
}
void go_from(int first_line, int second_line, int so_far)
{
// extend the first row
if(first_line < n)
{
extend(first_line + 1, second_line, so_far);
int i = candidate[0][0][first_line];
if(i != -1)
extend(i + 1, second_line, so_far + 1);
}
// extend the second row
if(second_line < n)
{
extend(first_line, second_line + 1, so_far);
int i = candidate[1][1][second_line];
if(i != -1)
extend(first_line, i + 1, so_far + 1);
}
// extend both rows (with a rectangle of height 2)
if(first_line == second_line && first_line < n)
{
int i = candidate[0][1][first_line];
if(i != -1)
extend(i + 1, i + 1, so_far + 1);
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0eXBlZGVmIGxvbmcgbG9uZyBsbDsKCnZvaWQgbWF4aW11bShpbnQgJiBhLCBpbnQgYikgeyBhID0gbWF4KGEsIGIpOyB9Cgp2ZWN0b3I8bGw+IGNhbmRpZGF0ZVsyXVsyXTsKCmludCBuOwp2ZWN0b3I8aW50PiBzb2x1dGlvbjsKdmVjdG9yPHZlY3Rvcjx2ZWN0b3I8aW50Pj4+IHJlY3RhbmdsZXM7CnZvaWQgZXh0ZW5kKGludCBmaXJzdF9saW5lLCBpbnQgc2Vjb25kX2xpbmUsIGludCBzY29yZSk7CnZvaWQgZ29fZnJvbShpbnQgZmlyc3RfbGluZSwgaW50IHNlY29uZF9saW5lLCBpbnQgc29fZmFyKTsKCmludCBtYWluKCkgCnsKCXNjYW5mKCIlZCIsICZuKTsKCXNvbHV0aW9uLnJlc2l6ZShuICsgMSwgMCk7CglyZWN0YW5nbGVzLnJlc2l6ZShuICsgMSk7Cgl2ZWN0b3I8IHZlY3RvcjxsbD4gPiBpbigyLCB2ZWN0b3I8bGw+KG4pKTsKCWZvcih2ZWN0b3I8bGw+ICYgcm93IDogaW4pCgkJZm9yKGludCBpbmRleCA9IDA7IGluZGV4IDwgbjsgKytpbmRleCkgCgkJewoJCQlzY2FuZigiJWxsZCIsICZyb3dbaW5kZXhdKTsKCQkJaWYoaW5kZXgpIHJvd1tpbmRleF0gKz0gcm93W2luZGV4LTFdOyAvLyBwcmVmaXggc3VtcwoJCX0KCWZvcihpbnQgaW5kZXgwID0gMDsgaW5kZXgwIDw9IDE7ICsraW5kZXgwKQoJCWZvcihpbnQgaW5kZXgxID0gaW5kZXgwOyBpbmRleDEgPD0gMTsgKytpbmRleDEpIAoJCXsKCQkJY2FuZGlkYXRlW2luZGV4MF1baW5kZXgxXS5yZXNpemUobiwgLTEpOwoJCQltYXA8bGwsIGludD4gbmV4dF9vY2N1cnJlbmNlOwoJCQlmb3IoaW50IHdoZXJlID0gbiAtIDE7IHdoZXJlID49IDA7IC0td2hlcmUpIAoJCQl7CgkJCQlsbCBuZXdfdmFsdWUgPSAwOwoJCQkJZm9yKGludCBpbmRleCA9IGluZGV4MDsgaW5kZXggPD0gaW5kZXgxOyArK2luZGV4KQoJCQkJCW5ld192YWx1ZSArPSBpbltpbmRleF1bd2hlcmVdOwoJCQkJbmV4dF9vY2N1cnJlbmNlW25ld192YWx1ZV0gPSB3aGVyZTsKCQkJCWxsIG5lZWQgPSAwOwoJCQkJaWYod2hlcmUgIT0gMCkKCQkJCQlmb3IoaW50IGluZGV4ID0gaW5kZXgwOyBpbmRleCA8PSBpbmRleDE7ICsraW5kZXgpCgkJCQkJCW5lZWQgKz0gaW5baW5kZXhdW3doZXJlLTFdOwoJCQkJaWYobmV4dF9vY2N1cnJlbmNlLmNvdW50KG5lZWQpKQoJCQkJCWNhbmRpZGF0ZVtpbmRleDBdW2luZGV4MV1bd2hlcmVdID0gbmV4dF9vY2N1cnJlbmNlW25lZWRdOwoJCQl9CgkJfQoJCglmb3IoaW50IHdoZXJlID0gMDsgd2hlcmUgPCBuOyArK3doZXJlKSAKCXsKCQlpbnQgc29fZmFyID0gc29sdXRpb25bd2hlcmVdOwoJCWdvX2Zyb20od2hlcmUsIHdoZXJlLCBzb19mYXIpOwoJCQoJCWF1dG8gbWluaW11bSA9IFsmXSAoaW50ICYgYSwgaW50IGIpIAoJCXsKCQkJaWYoYSA9PSAtMSB8fCBiIDwgYSkgYSA9IGI7CgkJfTsKCQlpbnQgaG93X2Zhcl91cCA9IC0xLCBob3dfZmFyX2Rvd24gPSAtMTsKCQlmb3IoY29uc3QgdmVjdG9yPGludD4gJiByZWN0IDogcmVjdGFuZ2xlc1t3aGVyZV0pIAoJCXsKCQkJaWYocmVjdFsxXSA9PSB3aGVyZSAmJiByZWN0WzJdID09IHNvX2ZhciArIDEpCgkJCQltaW5pbXVtKGhvd19mYXJfdXAsIHJlY3RbMF0pOwoJCQlpZihyZWN0WzBdID09IHdoZXJlICYmIHJlY3RbMl0gPT0gc29fZmFyICsgMSkKCQkJCW1pbmltdW0oaG93X2Zhcl9kb3duLCByZWN0WzFdKTsKCQl9CgkJaWYoaG93X2Zhcl91cCAhPSAtMSkKCQkJZ29fZnJvbShob3dfZmFyX3VwLCB3aGVyZSwgc29fZmFyICsgMSk7CgkJaWYoaG93X2Zhcl9kb3duICE9IC0xKQoJCQlnb19mcm9tKHdoZXJlLCBob3dfZmFyX2Rvd24sIHNvX2ZhciArIDEpOwoJfQoJcHJpbnRmKCIlZFxuIiwgc29sdXRpb25bbl0pOwp9Cgp2b2lkIGV4dGVuZChpbnQgZmlyc3RfbGluZSwgaW50IHNlY29uZF9saW5lLCBpbnQgc2NvcmUpIAp7CgltYXhpbXVtKHNvbHV0aW9uW21heChmaXJzdF9saW5lLCBzZWNvbmRfbGluZSldLCBzY29yZSk7CglyZWN0YW5nbGVzW21pbihmaXJzdF9saW5lLCBzZWNvbmRfbGluZSldLnB1c2hfYmFjayh2ZWN0b3I8aW50PntmaXJzdF9saW5lLCBzZWNvbmRfbGluZSwgc2NvcmV9KTsKfQoKdm9pZCBnb19mcm9tKGludCBmaXJzdF9saW5lLCBpbnQgc2Vjb25kX2xpbmUsIGludCBzb19mYXIpIAp7CgkvLyBleHRlbmQgdGhlIGZpcnN0IHJvdwoJaWYoZmlyc3RfbGluZSA8IG4pIAoJewoJCWV4dGVuZChmaXJzdF9saW5lICsgMSwgc2Vjb25kX2xpbmUsIHNvX2Zhcik7CgkJaW50IGkgPSBjYW5kaWRhdGVbMF1bMF1bZmlyc3RfbGluZV07CgkJaWYoaSAhPSAtMSkKCQkJZXh0ZW5kKGkgKyAxLCBzZWNvbmRfbGluZSwgc29fZmFyICsgMSk7Cgl9CgkvLyBleHRlbmQgdGhlIHNlY29uZCByb3cKCWlmKHNlY29uZF9saW5lIDwgbikgCgl7CgkJZXh0ZW5kKGZpcnN0X2xpbmUsIHNlY29uZF9saW5lICsgMSwgc29fZmFyKTsKCQlpbnQgaSA9IGNhbmRpZGF0ZVsxXVsxXVtzZWNvbmRfbGluZV07CgkJaWYoaSAhPSAtMSkKCQkJZXh0ZW5kKGZpcnN0X2xpbmUsIGkgKyAxLCBzb19mYXIgKyAxKTsKCX0KCS8vIGV4dGVuZCBib3RoIHJvd3MgKHdpdGggYSByZWN0YW5nbGUgb2YgaGVpZ2h0IDIpCglpZihmaXJzdF9saW5lID09IHNlY29uZF9saW5lICYmIGZpcnN0X2xpbmUgPCBuKSAKCXsKCQlpbnQgaSA9IGNhbmRpZGF0ZVswXVsxXVtmaXJzdF9saW5lXTsKCQlpZihpICE9IC0xKQoJCQlleHRlbmQoaSArIDEsIGkgKyAxLCBzb19mYXIgKyAxKTsKCX0KfQ==