#include <bits/stdc++.h>
using namespace std;
void unos(vector<string> &niz, int n)
{
	for(int i=0; i<n; i++)
	{
		cin >> niz[i];
	}
}
void binarni(vector<string> &niz, int n)
{
	for(int i=0; i<n; i++)
	{
		string binarni="";
		while(stoi(niz[i])>0)
		{
			string b=to_string(stoi(niz[i])%2);
			binarni+=b;
			int k=stoi(niz[i])/2;
			niz[i]=to_string(k);
		}
		reverse(binarni.begin(), binarni.end());
		niz[i]=binarni;
	}
}
string dekadni(string bin)
{
	int nov=0, stepen=0;
	for(int i=bin.length()-1; i>=0; i--, stepen++)
	{
		if(bin[i]=='1')
		{
			nov+=pow(2, stepen);
		}
	}
	return to_string(nov);
}
int main()
{
	int n;
	cin >> n;
	vector<string> a(n), b(n);
	unos(a, n);
	unos(b, n);
	binarni(a, n);
	binarni(b, n);
	int Max=-1;
	string A, B;
	for(int L=0; L<n; L++)
	{
		for(int R=L+1; R<n; R++)
		{
			int l=L+1;
			string novo=a[L];
			while(l<=R)
			{
				string novo1=a[l];
				while(novo.length()>novo1.length())
				{
					novo1="0"+novo1;
				}
				while(novo.length()<novo1.length())
				{
					novo="0"+novo;
				}
				for(int i=0; i<min(novo.length(), novo1.length()); i++)
				{
					if(novo[i]!=novo1[i])
						novo[i]='1';
					else
						novo[i]='0';
				}
				l++;
			}
			A=novo;
			l=L+1;
			novo=b[L];
			while(l<=R)
			{
				string novo1=b[l];
				while(novo.length()>novo1.length())
				{
					novo1="0"+novo1;
				}
				while(novo.length()<novo1.length())
				{
					novo="0"+novo;
				}
				for(int i=0; i<min(novo.length(), novo1.length()); i++)
				{
					if(novo[i]=='1' && novo1[i]=='1')
						novo[i]='1';
					else
						novo[i]='0';
				}
				l++;
			}
			B=novo;
			A=dekadni(A);
			B=dekadni(B);
			if(Max==-1 || Max<stoi(A)*stoi(B))
				Max=stoi(A)*stoi(B);
		}
	}
	cout << Max << endl;
	return 0;
}