#include <bits/stdc++.h>
using namespace std;
int sig(double x) { return (x > 1e-8) - (x < -1e-8); }
struct P {
  double x, y;
  P(double a = 0, double b = 0) : x(a), y(b) {}
  P operator+(const P &a) const { return P(x + a.x, y + a.y); }
  P operator-(const P &a) const { return P(x - a.x, y - a.y); }
  P operator*(const double a) const { return P(x * a, y * a); }
  P operator/(const double a) const { return P(x / a, y / a); }
  double operator*(const P &a) const { return x * a.x + y * a.y; }
  double operator^(const P &a) const { return x * a.y - y * a.x; }
  int operator==(const P &a) const {
    return sig(x - a.x) == 0 && sig(y - a.y) == 0;
  }
};
struct Plane {
  double a, b, c;
  Plane(P p, P q) {
    a = p.y - q.y;
    b = q.x - p.x;
    c = (p ^ q);
  }
  Plane(double aa, double bb, double cc) {
    a = aa;
    b = bb;
    c = cc;
  }
};
double calc(Plane l, P a) { return a.x * l.a + a.y * l.b + l.c; }
P inter(P a, P b, Plane L) {
  P res;
  double t1 = calc(L, a), t2 = calc(L, b);
  res.x = (t2 * a.x - t1 * b.x) / (t2 - t1);
  res.y = (t2 * a.y - t1 * b.y) / (t2 - t1);
  return res;
}
int cut(P *a, Plane &L, int n, P *res) {
  int cnt = 0;
  for (int i = 0; i < n; i++) {
    if (calc(L, a[i]) < -1e-8)
      res[cnt++] = a[i];
    else {
      int j;
      j = i - 1;
      if (j < 0) j = n - 1;
      if (calc(L, a[j]) < -1e-8) res[cnt++] = inter(a[j], a[i], L);
      j = i + 1;
      if (j == n) j = 0;
      if (calc(L, a[j]) < -1e-8) res[cnt++] = inter(a[i], a[j], L);
    }
  }
  return cnt;
}
double dis(P a, P b) { return sqrt((b - a) * (b - a)); }
double cal(P *p, int n) {
  double sum = 0;
  p[n] = p[0];
  for (int i = 1; i <= n; i++) {
    sum += dis(p[i], p[i - 1]);
  }
  return sum;
}
P p[40], q1[40], q2[40];
int main() {
  int n;
  P a, b;
  while (scanf("%lf%lf%lf%lf", &a.x, &a.y, &b.x, &b.y) != EOF) {
    scanf("%d", &n);
    for (int i = 0; i < n; i++) scanf("%lf%lf", &p[i].x, &p[i].y);
    p[n] = p[0];
    Plane l1 = Plane(a, b);
    Plane l2 = Plane(b, a);
    int m1 = cut(p, l1, n, q1);
    int m2 = cut(p, l2, n, q2);
    if (m1 == 0 || m2 == 0) {
      printf("%lf\n", dis(a, b));
      continue;
    }
    int t = 0;
    P pp[4];
    double sum1 = cal(q1, m1), sum2 = cal(q2, m2), sum3 = 0, sum = 0;
    for (int i = 0; i < m1; i++) {
      for (int j = 0; j < m2; j++) {
        if (q1[i] == q2[j]) pp[t++] = q1[i];
      }
    }
    if (dis(a, b) < dis(pp[0], a) || dis(a, b) < dis(pp[0], b)) {
      printf("%lf\n", dis(a, b));
      continue;
    }
    if (dis(pp[0], a) < dis(pp[1], a)) {
      sum += dis(pp[0], a) + dis(pp[1], b);
    } else {
      sum += dis(pp[1], a) + dis(pp[0], b);
    }
    sum3 = dis(pp[0], pp[1]);
    double minx =
        min(sum3 * 2 + sum, min(sum1 - sum3 + sum, sum2 - sum3 + sum));
    printf("%lf\n", minx);
  }
  return 0;
}
