#include <bits/stdc++.h>
using namespace std;
const int maxn = 35;
int x[maxn];
int y[maxn];
int a[10];
int b[10];
int n;
bool exist(){
int tot = 0;
bool vis[10];
memset(vis, 0, sizeof(vis));
for(int i=1; i<=n; i++){
int x1 = x[i];
int y1 = y[i];
for(int j=1; j<=8; j++){
if(x1 == a[j]&&y1 == b[j]){
vis[j] = true;
}
}
}
for(int i=1; i<=8; i++){
if(!vis[i]) return false;
}
return true;
}
bool cross(){
int x_mi = min(a[5], a[7]);
int x_mx = max(a[5], a[7]);
int y_mi = min(b[5], b[7]);
int y_mx = max(b[5], b[7]);
bool flag1 = false;
for(int i=1; i<=4; i++){
if(a[i]>x_mi&&a[i]<x_mx&&b[i]>y_mi&&b[i]<y_mx){
flag1 = true;
break;
}
}
bool flag2 = false;
for(int i=1; i<=4; i++){
if(a[i]<x_mi||a[i]>x_mx||b[i]<y_mi||b[i]>y_mx){
flag2 = true;
break;
}
}
if(flag1&&flag2) return true;
return false;
}
bool touch(){
int x_mi = min(a[5], a[7]);
int x_mx = max(a[5], a[7]);
int y_mi = min(b[5], b[7]);
int y_mx = max(b[5], b[7]);
for(int i=1; i<=4; i++){
if(b[i] == y_mi||b[i] == y_mx){
if(a[i]>=x_mi&&a[i]<=x_mx) return true;
}
if(a[i] == x_mi||a[i] == x_mx){
if(b[i]>=y_mi&&b[i]<=y_mx) return true;
}
}
return false;
}
bool in(){
int x_mi = min(a[5], a[7]);
int x_mx = max(a[5], a[7]);
int y_mi = min(b[5], b[7]);
int y_mx = max(b[5], b[7]);
int x_mi1 = min(a[1], a[3]);
int x_mx1 = max(a[1], a[3]);
int y_mi1 = min(b[1], b[3]);
int y_mx1 = max(b[1], b[3]);
if(x_mi<x_mi1&&x_mx>x_mx1){
for(int i=1; i<=4; i++){
if(a[i]<=x_mi||a[i]>=x_mx||b[i]<=y_mi||b[i]>=y_mx){
return false;
}
}
return true;
}
else if(x_mi>x_mi1&&x_mx<x_mx1){
for(int i=5; i<=8; i++){
if(a[i]<=x_mi1||a[i]>=x_mx1||b[i]<=y_mi1||b[i]>=y_mx1){
return false;
}
}
return true;
}
}
bool judge(){
if(a[1] == a[3]||b[1] == b[3]||a[5] == a[7]||b[5] == b[7])
return false;
return true;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
while(cin>>n&&n){
for(int i=1; i<=n; i++){
cin>>x[i]>>y[i];
}
int ans = -1;
for(int i=1; i<=n; i++){
for(int j=i+1; j<=n; j++){
for(int k=j+1; k<=n; k++){
for(int m = k+1; m<=n; m++){
a[1] = x[i], b[1] = y[i];
a[2] = x[i], b[2] = y[j];
a[3] = x[j], b[3] = y[j];
a[4] = x[j], b[4] = y[i];
a[5] = x[k], b[5] = y[k];
a[6] = x[k], b[6] = y[m];
a[7] = x[m], b[7] = y[m];
a[8] = x[m], b[8] = y[k];
if(!judge()) continue;
if(!exist()) continue;
if(cross()) continue;
if(touch()) continue;
if(in()){
int area1 = abs(a[1]-a[3])*abs(b[1]-b[3]);
int area2 = abs(a[5]-a[7])*abs(b[5]-b[7]);
area1 = max(area1, area2);
ans = max(ans, area1);
continue;
}
int area1 = abs(a[1]-a[3])*abs(b[1]-b[3]);
int area2 = abs(a[5]-a[7])*abs(b[5]-b[7]);
ans = max(ans, area1+area2);
}
}
}
}
if(ans == -1){
printf("imp\n");
}
else {
printf("%d\n", ans);
}
}
return 0;
}