#include <bits/stdc++.h>
using namespace std;
struct point {
  double x, y;
} A, B, P[111];
const double eps = 1e-2;
const double INF = 1e+9;
int N;
double sum[111];
int sgn(double x) {
  if (x > eps) return 1;
  if (x < -eps) return -1;
  return 0;
}
double dis(point P, point Q) {
  return sqrt((P.x - Q.x) * (P.x - Q.x) + (P.y - Q.y) * (P.y - Q.y));
}
double crs(point P, point Q, point R) {
  return (Q.x - P.x) * (R.y - P.y) - (Q.y - P.y) * (R.x - P.x);
}
double dot(point O, point P, point Q) {
  return (P.x - O.x) * (Q.x - O.x) + (P.y - O.y) * (Q.y - O.y);
}
double calc(double x) {
  int n = (int)x;
  if (n < 0) n = 0;
  if (n == N) n = N - 1;
  return sum[n] + (sum[n + 1] - sum[n]) * (x - n);
}
double solve() {
  double l = 1.0, r = 0.0, lpos = 0.0, rpos = 0.0;
  for (int i = 0; i < N; i++)
    if (sgn(crs(A, B, P[i])) == 0 && dot(A, B, P[i]) > 0.0 &&
        dot(B, A, P[i]) > 0.0) {
      double tmp = dis(A, P[i]) / dis(A, B);
      if (tmp < l) l = tmp, lpos = i;
      if (tmp > r) r = tmp, rpos = i;
    }
  for (int i = 0; i < N; i++) {
    point C = P[i], D = P[(i + 1) % N];
    if (sgn(crs(A, B, C)) * sgn(crs(A, B, D)) == -1 &&
        sgn(crs(C, D, A)) * sgn(crs(C, D, B)) == -1) {
      double tmp = crs(C, D, A) / (crs(C, D, A) - crs(C, D, B));
      double pos = i + crs(A, B, C) / (crs(A, B, C) - crs(A, B, D));
      if (tmp < l) l = tmp, lpos = pos;
      if (tmp > r) r = tmp, rpos = pos;
    }
  }
  if (l > r) return dis(A, B);
  double p1 = calc(lpos), p2 = calc(rpos);
  double res = min(abs(p2 - p1), sum[N] - abs(p2 - p1));
  return min(dis(A, B) * (1.0 + r - l), dis(A, B) * (1.0 - (r - l)) + res);
}
int main() {
  cin >> A.x >> A.y >> B.x >> B.y;
  cin >> N;
  for (int i = 0; i < N; i++) cin >> P[i].x >> P[i].y;
  for (int i = 0; i < N; i++) sum[i + 1] = sum[i] + dis(P[i], P[(i + 1) % N]);
  printf("%.9f\n", solve());
  return 0;
}
