#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-9;
int comp(double a, double b) {
  if (fabs(a - b) < eps) return 0;
  return a > b ? 1 : -1;
}
struct pComp {
  bool operator()(const complex<double> &A, const complex<double> &B) const {
    if (comp(A.real(), B.real())) return A.real() < B.real();
    if (comp(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 pointOnSeg(complex<double> A, complex<double> B, complex<double> R) {
  return comp(len(A, B), len(A, R) + len(B, R)) == 0;
}
bool lineInter(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 (comp(d1, d2) == 0) return false;
  R = (d1 * Q - d2 * P) / (d1 - d2);
  if (!pointOnSeg(A, B, R) || !pointOnSeg(P, Q, R)) return false;
  return true;
}
int n;
complex<double> st, en;
vector<complex<double> > pol;
double mat[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 ret = len(st, en);
  set<complex<double>, pComp> intrs;
  for (int i = 0; i < n; i++) {
    complex<double> R;
    if (lineInter(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());
    double d1 = -1, d2 = 0;
    for (int i = 0; i < n; i++) {
      int j = (i + 1) % n;
      d2 += len(pol[i], pol[j]);
      if (d1 == -1 && pointOnSeg(pol[i], pol[j], p1)) {
        if (pointOnSeg(pol[i], pol[j], p2)) goto PRINT;
        d1 = len(p1, pol[j]);
        while (1) {
          int j2 = (j + 1) % n;
          if (pointOnSeg(pol[j], pol[j2], p2)) {
            d1 += len(pol[j], p2);
            break;
          }
          d1 += len(pol[j], pol[j2]);
          j = j2;
        }
      }
    }
    d2 -= d1;
    double d3 = len(p1, p2);
    ret -= d3;
    d3 *= 2;
    ret += min(d3, min(d1, d2));
  }
PRINT:;
  printf("%.9lf\n", ret);
  return 0;
}
