#include <bits/stdc++.h>
using namespace std;
typedef struct {
  double x, y;
} M;
M t[60];
int ptop = 0, p[2];
double sx, sy, tx, ty, a, b, c, dx, dy;
const double limit = 0.00001;
double dis(double x, double y) { return sqrt(x * x + y * y); }
int check(M p, M q) {
  double aa = q.y - p.y, bb = p.x - q.x, cc = p.y * q.x - q.y * p.x;
  if ((b * aa - bb * a) < limit && (b * aa - bb * a) > -limit) return 0;
  dx = (bb * c - b * cc) / (b * aa - bb * a);
  if ((a * bb - aa * b) < limit && (a * bb - aa * b) > -limit) return 0;
  dy = (aa * c - a * cc) / (a * bb - aa * b);
  if ((dx - sx) * (dx - tx) < limit && (dy - sy) * (dy - ty) < limit &&
      (dx - p.x) * (dx - q.x) < limit && (dy - p.y) * (dy - q.y) < limit)
    return 1;
  return 0;
}
int main() {
  double f, s;
  int i, n, j, g, h;
  while (~scanf("%lf%lf%lf%lf%d", &sx, &sy, &tx, &ty, &n)) {
    for (i = 0; i < n; i++) scanf("%lf%lf", &t[i].x, &t[i].y);
    t[n] = t[0];
    a = ty - sy, b = sx - tx, c = sy * tx - ty * sx;
    s = 0;
    for (i = 0; i < n; i++) {
      s += dis(t[i].x - t[i + 1].x, t[i].y - t[i + 1].y);
      f = a * t[i].x + b * t[i].y + c;
      if (f < limit && f > -limit) {
        if ((t[i].x - sx) * (t[i].x - tx) < limit &&
            (t[i].y - sy) * (t[i].y - ty) < limit)
          p[ptop++] = i;
      }
    }
    double tmp = 0, ans = 1e9;
    if (ptop == 2) {
      if ((p[0] + 1 == p[1]) || (p[0] == 0 && p[1] == n - 1))
        printf("%.9lf\n", dis(sx - tx, sy - ty));
      else {
        tmp = 0;
        for (i = p[0]; i < p[1]; i++)
          tmp += dis(t[i].x - t[i + 1].x, t[i].y - t[i + 1].y);
        ans = tmp + dis(sx - tx, sy - ty) -
              dis(t[p[0]].x - t[p[1]].x, t[p[0]].y - t[p[1]].y);
        ans = min(ans, dis(sx - tx, sy - ty) -
                           dis(t[p[0]].x - t[p[1]].x, t[p[0]].y - t[p[1]].y) +
                           s - tmp);
        ans = min(ans, dis(sx - tx, sy - ty) +
                           dis(t[p[0]].x - t[p[1]].x, t[p[0]].y - t[p[1]].y));
        printf("%.9lf\n", ans);
      }
    } else if (ptop == 1) {
      f = 1.0;
      for (i = p[0] + 1; i < n; i++) {
        if (check(t[i], t[i + 1])) {
          f = -1.0;
          break;
        }
      }
      if (f > 0.0)
        for (i = p[0] - 2; i >= 0; i--) {
          if (check(t[i], t[i + 1])) {
            f = -1.0;
            break;
          }
        }
      if (f > 0.0)
        printf("%.9lf\n", dis(sx - tx, sy - ty));
      else {
        tmp = 0.0;
        ans = dis(sx - tx, sy - ty) + dis(t[p[0]].x - dx, t[p[0]].y - dy);
        for (j = p[0]; j < i; j++)
          tmp += dis(t[j].x - t[j + 1].x, t[j].y - t[j + 1].y);
        tmp += dis(t[i].x - dx, t[i].y - dy);
        ans = min(ans, min(tmp, s - tmp) + dis(sx - tx, sy - ty) -
                           dis(t[p[0]].x - dx, t[p[0]].y - dy));
        printf("%.9lf\n", ans);
      }
    } else {
      double xx, yy;
      for (g = 0; g < n; g++)
        if (check(t[g], t[g + 1])) {
          xx = dx, yy = dy;
          break;
        }
      if (g == n) {
        printf("%.9lf\n", dis(sx - tx, sy - ty));
        continue;
      }
      for (h = g + 1; h < n; h++)
        if (check(t[h], t[h + 1])) break;
      tmp = 0.0;
      for (i = g + 1; i < h; i++)
        tmp += dis(t[i].x - t[i + 1].x, t[i].y - t[i + 1].y);
      tmp +=
          dis(xx - t[g + 1].x, yy - t[g + 1].y) + dis(dx - t[h].x, dy - t[h].y);
      ans = dis(sx - tx, sy - ty) + dis(xx - dx, yy - dy);
      ans = min(ans, dis(sx - tx, sy - ty) - dis(xx - dx, yy - dy) + tmp);
      ans = min(ans, dis(sx - tx, sy - ty) - dis(xx - dx, yy - dy) + s - tmp);
      printf("%.9lf\n", ans);
    }
  }
  return 0;
}
