#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-9;
int cmp(double a, double b) {
  if (fabs(a - b) < eps) return 0;
  return a > b ? 1 : -1;
}
struct set_cmp {
  bool operator()(const complex<double> &A, const complex<double> &B) const {
    if (cmp(A.real(), B.real())) return A.real() < B.real();
    if (cmp(A.imag(), B.imag())) return A.imag() < B.imag();
    return 0;
  }
};
double len(complex<double> A, complex<double> B) {
  return hypot(A.real() - B.real(), A.imag() - B.imag());
}
bool segement(complex<double> A, complex<double> B, complex<double> R) {
  return cmp(len(A, B), len(A, R) + len(B, R)) == 0;
}
bool inter(complex<double> A, complex<double> B, complex<double> P,
           complex<double> Q, complex<double> &R) {
  double d1 = ((conj(P - A) * (B - A)).imag());
  double d2 = ((conj(Q - A) * (B - A)).imag());
  if (cmp(d1, d2) == 0) return false;
  R = (d1 * Q - d2 * P) / (d1 - d2);
  if (!segement(A, B, R) || !segement(P, Q, R)) return false;
  return true;
}
int n;
complex<double> st, en;
vector<complex<double> > pol;
double g[34][34];
int main() {
  int x, y;
  cin >> x >> y;
  st = complex<double>(x, y);
  cin >> x >> y;
  en = complex<double>(x, y);
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> x >> y;
    pol.push_back(complex<double>(x, y));
  }
  double ans = len(st, en);
  set<complex<double>, set_cmp> intrs;
  for (int i = 0; i < n; i++) {
    complex<double> R;
    if (inter(st, en, pol[i], pol[(i + 1) % n], R)) intrs.insert(R);
  }
  if (intrs.size() == 2) {
    complex<double> p1 = *intrs.begin();
    complex<double> p2 = *(++intrs.begin());
    for (int i = 0; i < n + 4; i++) {
      for (int j = 0; j < n + 4; j++) g[i][j] = 1 << 30;
      g[i][i] = 0;
    }
    if (cmp(len(p2, st), len(p1, st)) < 0) swap(p1, p2);
    g[0][2] = g[2][0] = len(st, p1);
    g[1][3] = g[3][1] = len(en, p2);
    g[2][3] = g[3][2] = len(p1, p2) * 2;
    for (int i = 0; i < n; i++) {
      int i1 = i + 4;
      int i2 = (i + 1) % n + 4;
      g[i1][i2] = g[i2][i1] = len(pol[i1 - 4], pol[i2 - 4]);
      if (segement(pol[i1 - 4], pol[i2 - 4], p1)) {
        if (segement(pol[i1 - 4], pol[i2 - 4], p2))
          return printf("%.9lf\n", ans), 0;
        g[2][i1] = g[i1][2] = len(pol[i1 - 4], p1);
        g[2][i2] = g[i2][2] = len(pol[i2 - 4], p1);
      }
      if (segement(pol[i1 - 4], pol[i2 - 4], p2)) {
        g[3][i1] = g[i1][3] = len(pol[i1 - 4], p2);
        g[3][i2] = g[i2][3] = len(pol[i2 - 4], p2);
      }
    }
    n += 4;
    for (int k = 0; k < n; k++)
      for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++) g[i][j] = min(g[i][j], g[i][k] + g[k][j]);
    ans = g[0][1];
  }
  printf("%.9lf\n", ans);
}
