#include <bits/stdc++.h>
using namespace std;
struct pnt {
  double x, y;
  pnt() {}
  pnt(double _x, double _y) : x(_x), y(_y) {}
} s, t, p[53], ia(0, 0), ib(0, 0);
inline pnt operator-(const pnt &A, const pnt &B) {
  return pnt(A.x - B.x, A.y - B.y);
}
inline double operator*(const pnt &A, const pnt &B) {
  return A.x * B.y - A.y * B.x;
}
inline bool Intersect(const pnt &a, const pnt &b, const pnt &c, const pnt &d) {
  if (min(a.x, b.x) > max(c.x, d.x) || max(a.x, b.x) < min(c.x, d.x) ||
      min(a.y, b.y) > max(c.y, d.y) || max(a.y, b.y) < min(c.y, d.y))
    return 0;
  if ((a - b) * (c - d) == 0) return 0;
  return ((a - c) * (d - c)) * ((b - c) * (d - c)) <= 0 &&
         ((c - a) * (b - a)) * ((d - a) * (b - a)) <= 0;
}
inline pnt Intersect_Point(pnt a, pnt b, pnt c, pnt d) {
  double ix, iy, k1, k2, b1, b2;
  if (a.x - b.x == 0) swap(a, c), swap(b, d);
  k1 = (a.y - b.y) / (a.x - b.x);
  b1 = a.y - a.x * k1;
  if (c.x - d.x != 0) {
    k2 = (c.y - d.y) / (c.x - d.x);
    b2 = c.y - c.x * k2;
    ix = (b1 - b2) / (k2 - k1);
  } else
    ix = c.x;
  iy = ix * k1 + b1;
  return pnt(ix, iy);
}
inline double dist(const pnt &A, const pnt &B) {
  return sqrt((A.x - B.x) * (A.x - B.x) + (A.y - B.y) * (A.y - B.y));
}
int n, ina(-1), inb(-1);
double cir(0), hcir(0);
void init() {
  scanf("%lf%lf%lf%lf", &s.x, &s.y, &t.x, &t.y);
  scanf("%d", &n);
  for (int i = 1; i <= n; ++i) scanf("%lf%lf", &p[i].x, &p[i].y);
  p[0] = p[n];
  for (int i = 1; i <= n; ++i) {
    cir += dist(p[i - 1], p[i]);
    if (Intersect(s, t, p[i - 1], p[i])) {
      pnt tmp = Intersect_Point(s, t, p[i - 1], p[i]);
      if (ina && tmp.x == ia.x && tmp.y == ia.y) continue;
      ib = ia, ia = tmp;
      inb = ina, ina = i;
    }
  }
}
void work() {
  if (ina == -1 || inb == -1)
    printf("%.9lf\n", dist(s, t));
  else {
    for (int i = inb + 1; i < ina; ++i) hcir += dist(p[i - 1], p[i]);
    hcir += dist(ib, p[inb]);
    hcir += dist(p[ina - 1], ia);
    if (dist(s, ia) + dist(ib, t) < dist(s, ib) + dist(ia, t)) swap(ia, ib);
    printf("%.9lf\n", min(dist(s, t) + dist(ib, ia),
                          dist(s, ib) + dist(ia, t) + min(cir - hcir, hcir)));
  }
}
int main() {
  init();
  work();
  return 0;
}
