// POSIX C
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <signal.h>
#include <errno.h>
#include <fcntl.h>
#include <dirent.h>
// ANSI C
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
// C++ lib
#include <iostream>
#include <limits>
#include <fstream>
#include <vector>
using namespace std;
int main(){
int N;
cin>>N;
if(N == 0){
cout<<0<<endl;
return 0;
}
vector<int> A(N);
vector<int> B(N);
for(int i=0;i<N;++i){
cin>>A[i];
}
for(int i=0;i<N;++i){
cin>>B[i];
}
vector<vector<int> > d(N+1, vector<int>(N+1, 0));
d[0][0] = 0;
for(int i=1;i<=N;++i){
if(i%2 == 0){
int sum = 0;
for(int j=0;j<i;j+=2){
sum += A[j]*A[j+1];
}
d[i][0] = sum;
}else{
d[i][0] = numeric_limits<int>::max();
}
}
for(int i=1;i<=N;++i){
if(i%2 == 0){
int sum = 0;
for(int j=0;j<i;j+=2){
sum += B[j]*B[j+1];
}
d[0][i] = sum;
}else{
d[0][i] = numeric_limits<int>::max();
}
}
d[1][1] = A[0]*B[0];
for(int i=2;i<=N;++i){
if(i%2 == 1){
int min = numeric_limits<int>::max();
if(d[i-1][0]!=numeric_limits<int>::max()){
min = min<(d[i-1][0]+A[i-1]*B[0])?min:(d[i-1][0]+A[i-1]*B[0]);
}
if(d[i-2][1]!=numeric_limits<int>::max()){
min = min<(d[i-2][1]+A[i-1]*A[i-2])?min:(d[i-2][1]+A[i-1]*A[i-2]);
}
d[i][1] = min;
}else{
d[i][1] = numeric_limits<int>::max();
}
}
for(int i=2;i<=N;++i){
if(i%2 == 1){
int min = numeric_limits<int>::max();
if(d[0][i-1]!=numeric_limits<int>::max()){
min = min<(d[0][i-1]+A[0]*B[i-1])?min:(d[0][i-1]+A[0]*B[i-1]);
}
if(d[1][i-2]!=numeric_limits<int>::max()){
min = min<(d[1][i-2]+B[i-1]*B[i-2])?min:(d[1][i-2]+B[i-1]*B[i-2]);
}
d[1][i] = min;
}else{
d[1][i] = numeric_limits<int>::max();
}
}
for(int i=2;i<=N;++i){
for(int j=2;j<=N;++j){
int min = numeric_limits<int>::max();
if(d[i-1][j-1]!=numeric_limits<int>::max()){
min = d[i-1][j-1]+A[i-1]*B[j-1];
}
if(d[i-2][j]!=numeric_limits<int>::max()){
min = min<(d[i-2][j]+A[i-2]*A[i-1])?min:(d[i-2][j]+A[i-2]*A[i-1]);
}
if(d[i][j-2]!=numeric_limits<int>::max()){
min = min<(d[i][j-2]+B[j-2]*B[j-1])?min:(d[i][j-2]+B[j-2]*B[j-1]);
}
d[i][j] = min;
}
}
/*
for(int i=0;i<=N;++i){
for(int j=0;j<=N;++j){
cout<<d[i][j]<<" ";
}
cout<<endl;
}
*/
cout<<d[N][N]<<endl;
return 0;
}
// 你提交试试,个人感觉好难,想了整晚。。。