#include <bits/stdc++.h>
using namespace std;
int N;
struct Point {
  double x, y;
} p[110], S, E, O = {0, 0};
int n_tot;
Point operator-(const Point &i, const Point &j) {
  Point ret = {i.x - j.x, i.y - j.y};
  return ret;
}
Point operator*(double i, const Point &j) {
  Point ret = {i * j.x, i * j.y};
  return ret;
}
Point operator+(const Point &i, const Point &j) {
  Point ret = {i.x + j.x, i.y + j.y};
  return ret;
}
double det(const Point &i, const Point &j) { return i.x * j.y - i.y * j.x; }
double dot(const Point &i, const Point &j) { return i.x * j.x + i.y * j.y; }
double Dist2(const Point &i, const Point &j) {
  return ((i.x - j.x) * (i.x - j.x)) + ((i.y - j.y) * (i.y - j.y));
}
Point Cross(const Point &p1, const Point &p2, const Point &p3,
            const Point &p4) {
  double s1 = det(p2 - p1, p3 - p1), s2 = det(p4 - p1, p2 - p1);
  Point ret = (s2 / (s1 + s2)) * p3 + (s1 / (s1 + s2)) * p4;
  return ret;
}
double sqrt3 = sqrt(3.0);
double ans;
int id1, id2;
void Init() {
  n_tot = 0;
  ans = 0;
  id1 = id2 = -1;
  scanf("%lf%lf%lf%lf", &S.x, &S.y, &E.x, &E.y);
  scanf("%d", &N);
  for (int i = 0; i < N; i++) {
    scanf("%lf%lf", &p[n_tot].x, &p[n_tot].y);
    if (n_tot && fabs(det(p[n_tot] - S, E - S)) < 1e-7 &&
        fabs(det(p[n_tot - 1] - S, E - S)) < 1e-7) {
      n_tot = -1;
      return;
    }
    if (fabs(det(p[n_tot] - S, E - S)) < 1e-7 &&
        (S.x - p[n_tot].x) * (E.x - p[n_tot].x) < 1e-7 &&
        (S.y - p[n_tot].y) * (E.y - p[n_tot].y) < 1e-7) {
      if (id1 == -1)
        id1 = n_tot;
      else
        id2 = n_tot;
      n_tot++;
    } else if (n_tot &&
               det(p[n_tot] - S, E - S) * det(p[n_tot - 1] - S, E - S) <
                   -1e-7 &&
               det(S - p[n_tot], p[n_tot - 1] - p[n_tot]) *
                       det(E - p[n_tot], p[n_tot - 1] - p[n_tot]) <
                   -1e-7) {
      p[n_tot + 1] = p[n_tot];
      p[n_tot] = Cross(S, E, p[n_tot + 1], p[n_tot - 1]);
      if (id1 == -1)
        id1 = n_tot;
      else
        id2 = n_tot;
      n_tot += 2;
    } else
      n_tot++;
  }
  if (fabs(det(p[n_tot - 1] - S, E - S)) < 1e-7 &&
      fabs(det(p[0] - S, E - S)) < 1e-7) {
    n_tot = -1;
    return;
  }
  if (det(p[n_tot - 1] - S, E - S) * det(p[0] - S, E - S) < -1e-7 &&
      det(S - p[n_tot - 1], p[0] - p[n_tot - 1]) *
              det(E - p[n_tot - 1], p[0] - p[n_tot - 1]) <
          -1e-7) {
    p[n_tot] = Cross(S, E, p[n_tot - 1], p[0]);
    id2 = n_tot;
    n_tot++;
  }
  if (id1 == -1 || id2 == -1) {
    n_tot = -1;
    return;
  }
  if (Dist2(p[id1], S) < Dist2(p[id2], S))
    ans = sqrt(Dist2(p[id1], S)) + sqrt(Dist2(p[id2], E));
  else
    ans = sqrt(Dist2(p[id2], S)) + sqrt(Dist2(p[id1], E));
}
void Solve() {
  if (-1 == n_tot) {
    printf("%.9lf\n", sqrt(Dist2(S, E)));
    return;
  }
  double t1 = 0, t2 = sqrt(Dist2(p[n_tot - 1], p[0]));
  for (int i = id1; i < id2; i++) t1 += sqrt(Dist2(p[i], p[i + 1]));
  for (int i = id2; i < n_tot - 1; i++) t2 += sqrt(Dist2(p[i], p[i + 1]));
  for (int i = 0; i < id1; i++) t2 += sqrt(Dist2(p[i], p[i + 1]));
  printf("%.9lf\n", ans + min(min(t1, t2), 2 * sqrt(Dist2(p[id1], p[id2]))));
}
int main() {
  Init();
  Solve();
  return 0;
}
