#include <bits/stdc++.h>
using namespace std;
struct Point {
  int x, y;
};
Point operator-(Point a, Point b) {
  a.x -= b.x;
  a.y -= b.y;
  return a;
}
pair<double, double> operator-(pair<double, double> a, Point b) {
  a.first -= b.x;
  a.second -= b.y;
  return a;
}
pair<double, double> operator-(pair<double, double> a, pair<double, double> b) {
  a.first -= b.first;
  a.second -= b.second;
  return a;
}
int cp(Point a, Point b) { return a.x * b.y - a.y * b.x; }
double dist(Point p) { return sqrt(p.x * p.x + p.y * p.y); }
double dist(pair<double, double> p) {
  return sqrt(p.first * p.first + p.second * p.second);
}
bool intersect(Point a, Point u, Point b, Point v) {
  int x = cp(u, v);
  if (x == 0) return false;
  int tmp = cp(b, v) - cp(a, v);
  if (x > 0) {
    return 0 <= tmp && tmp <= x;
  } else {
    return 0 >= tmp && tmp >= x;
  }
}
pair<double, double> getIntersect(Point a, Point u, Point b, Point v) {
  int x = cp(u, v);
  int tmp = cp(b, v) - cp(a, v);
  double t = tmp / double(x);
  pair<double, double> res = {a.x, a.y};
  res.first += u.x * t;
  res.second += u.y * t;
  return res;
}
Point p[70];
int main() {
  Point S, T;
  int n;
  ignore = scanf("%d %d %d %d %d", &S.x, &S.y, &T.x, &T.y, &n);
  for (int i = 0; i < n; i++) {
    ignore = scanf("%d %d", &p[i].x, &p[i].y);
    p[i + n] = p[i];
  }
  int A = 0, B = 0;
  for (int i = 1; i < n; i++) {
    if (cp(T - S, p[i] - S) < cp(T - S, p[A] - S)) {
      A = i;
    }
    if (cp(T - S, p[i] - S) > cp(T - S, p[B] - S)) {
      B = i;
    }
  }
  if (cp(T - S, p[B] - S) <= 0 || cp(T - S, p[A] - S) >= 0) {
    printf("%.15lf\n", dist(T - S));
    return 0;
  }
  int L = A;
  while (cp(T - S, p[L + 1] - S) < 0) L++;
  int R = B;
  while (cp(T - S, p[R + 1] - S) > 0) R++;
  if (!intersect(S, T - S, p[L], p[L + 1] - p[L])) {
    printf("%.15lf\n", dist(T - S));
    return 0;
  }
  pair<double, double> X = getIntersect(S, T - S, p[L], p[L + 1] - p[L]);
  pair<double, double> Y = getIntersect(S, T - S, p[R], p[R + 1] - p[R]);
  if (L > R) R += n;
  double t1 = dist(X - p[L + 1]);
  for (int i = L + 1; i < R; i++) {
    t1 += dist(p[i + 1] - p[i]);
  }
  t1 += dist(Y - p[R]);
  if (R >= n) R -= n;
  if (L < R) L += n;
  double t2 = dist(Y - p[R + 1]);
  for (int i = R + 1; i < L; i++) {
    t2 += dist(p[i + 1] - p[i]);
  }
  t2 += dist(X - p[L]);
  double t3 = dist(X - Y) * 2.0;
  double ans = dist(X - T) + dist(Y - S) + min(t1, min(t2, t3));
  printf("%.15lf\n", ans);
}
