#include <bits/stdc++.h>
using namespace std;
const int maxn = 35;
const double EPS = 1e-9;
complex<double> pt[maxn];
int cross(complex<double> &a, complex<double> &b, complex<double> &c) {
  double d = imag(conj(b - a) * (c - a));
  if (fabs(d) < EPS) return 0.;
  if (d < 0.) return -1;
  return 1;
}
int main() {
  int n, i, j, fl;
  complex<double> s, f, u, d;
  double l, lu, ld, xs, ys, xf, yf, ans, ans2, x0, dx;
  set<double> x;
  cin >> xs >> ys >> xf >> yf;
  s = complex<double>(xs, ys);
  f = complex<double>(xf, yf);
  cin >> n;
  for (i = 0; i < n; i++) {
    cin >> xs >> ys;
    pt[i] = complex<double>(xs, ys);
  }
  fl = 0;
  for (i = 0; i < n; i++) pt[i] -= s;
  f -= s;
  s = complex<double>(0., 0.);
  for (i = 0; i < n; i++) {
    for (j = i + 1; j < n; j++) {
      if (cross(s, f, pt[i]) * cross(s, f, pt[j]) < 0) {
        if (cross(pt[i], pt[j], s) * cross(pt[i], pt[j], f) < 0) {
          fl = 1;
        }
      }
    }
  }
  if (!fl) {
    ans = abs(f);
    printf("%.12lf", ans);
    return 0;
  }
  for (i = 0; i < n; i++) {
    pt[i] = pt[i] / f * abs(f);
  }
  f = complex<double>(abs(f), 0.);
  for (i = 0; i < n; i++) {
    if (fabs(pt[i].imag()) < EPS) {
      x.insert(pt[i].real());
    }
  }
  lu = ld = 0.;
  for (i = 0; i < n; i++) {
    if (pt[i].imag() * pt[(i + n - 1) % n].imag() > -EPS) {
      l = abs(pt[i] - pt[(i + n - 1) % n]);
      if (pt[i].imag() > EPS || pt[(i + n - 1) % n].imag() > EPS)
        lu += l;
      else
        ld += l;
      continue;
    }
    if (pt[i].imag() < 0.) {
      d = pt[i];
      u = pt[(i + n - 1) % n];
    } else {
      u = pt[i];
      d = pt[(i + n - 1) % n];
    }
    l = abs(d - u);
    lu += l * u.imag() / (u.imag() - d.imag());
    ld += l * d.imag() / (d.imag() - u.imag());
    x0 = d.real() - d.imag() * (u.real() - d.real()) / (u.imag() - d.imag());
    x.insert(x0);
  }
  dx = -(*(x.begin())) + (*(x.rbegin()));
  ans = abs(f) - dx;
  ans2 = min(lu, ld);
  ans2 = min(ans2, 2. * dx);
  ans += ans2;
  printf("%.12lf", ans);
}
