#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 7;
struct Point
{
long long x, y;
Point() {}
Point(long long _x, long long _y): x(_x), y(_y) {}
// віднімання векторів
Point operator-(const Point& p) const
{
return Point(x - p.x, y - p.y);
}
// квадрат довжини вектора
long long d2() const
{
return x * x + y * y;
}
// скалярний добуток
long long dot(const Point& p) const
{
return x * p.x + y * p.y;
}
// векторний добуток
long long operator*(const Point& p) const
{
return x * p.y - p.x * y;
}
} p[2][MAXN];
struct rel{
long long dist1, dist2, dot, cross;
} A[3 * MAXN];
bool operator ==(const rel& a, const rel& b){
return (a.dist1 == b.dist1 && a.dist2 == b.dist2 && a.dot == b.dot && a.cross == b.cross);
}
int pi[3 * MAXN];
int main()
{
int n;
cin >> n;
for(int j = 0; j < 2; j++)
{
for(int i = 1; i <= n; i++)
cin >> p[j][i].x >> p[j][i].y;
p[j][0] = p[j][n];
p[j][n + 1] = p[j][1];
}
for(int j = 0; j < 2; j++)
{
for(int i = 1; i <= n; i++)
{
int idx = j == 0 ? i + n + 1 : i;
A[idx].dist1 = (p[j][i] - p[j][i - 1]).d2();
A[idx].dist2 = (p[j][i + 1] - p[j][i]).d2();
A[idx].dot = (p[j][i] - p[j][i - 1]).dot(p[j][i + 1] - p[j][i]);
A[idx].cross = (p[j][i] - p[j][i - 1]) * (p[j][i + 1] - p[j][i]);
if(j == 0)
A[i + 2 * n + 1] = A[i + n + 1];
}
}
A[n + 1].dist1 = -1;
pi[0] = pi[1] = 0;
for(int i = 2; i <= 3 * n + 1; i++)
{
int k = i - 1;
while (k > 1 && !(A[i] == A[pi[k] + 1]))
k = pi[k];
if (A[i] == A[pi[k] + 1])
pi[i] = pi[k] + 1;
else
pi[i] = 0;
if (pi[i] == n)
{
cout << i - 2 * n << "\n";
break;
}
}
return 0;
}