#include <bits/stdc++.h>
using namespace std;
int sx, sy, ex, ey, n, i, j, c;
double mn, s, z, xi, yi, s2, s3;
int X[31], Y[31], I[31];
double XI[31], YI[31];
bool intersect(double x1, double y1, double x2, double y2, double x3, double y3,
               double x4, double y4) {
  double A1, B1, C1, A2, B2, C2, det;
  A1 = y2 - y1;
  B1 = x1 - x2;
  C1 = A1 * x1 + B1 * y1;
  A2 = y4 - y3;
  B2 = x3 - x4;
  C2 = A2 * x3 + B2 * y3;
  det = ((A1) * (B2) - (A2) * (B1));
  if (fabs(det) < 1e-10)
    return 0;
  else {
    xi = ((C1) * (B2) - (C2) * (B1)) / det;
    yi = ((A1) * (C2) - (A2) * (C1)) / det;
    return ((xi) + 1e-10 > min(x1, x2) && (xi)-1e-10 < max(x1, x2)) &&
           ((yi) + 1e-10 > min(y1, y2) && (yi)-1e-10 < max(y1, y2)) &&
           ((xi) + 1e-10 > min(x3, x4) && (xi)-1e-10 < max(x3, x4)) &&
           ((yi) + 1e-10 > min(y3, y4) && (yi)-1e-10 < max(y3, y4));
  }
}
int main() {
  scanf("%d%d%d%d%d", &sx, &sy, &ex, &ey, &n);
  for (i = 0; i < n; i++) scanf("%d%d", &X[i], &Y[i]);
  X[n] = X[0];
  Y[n] = Y[0];
  for (i = 0; i < n; i++)
    if (intersect(sx, sy, ex, ey, X[i], Y[i], X[i + 1], Y[i + 1])) {
      I[c] = i;
      XI[c] = xi;
      YI[c] = yi;
      for (j = 0; j < i; j++)
        if (intersect(sx, sy, ex, ey, X[j], Y[j], X[j + 1], Y[j + 1]) &&
            fabs(XI[c] - xi) < 1e-10 && fabs(YI[c] - yi) < 1e-10)
          break;
      if (j == i) c++;
    }
  assert(c >= 0 || c <= 2);
  if (c == 2) {
    s = min(sqrt((sx - XI[0]) * (sx - XI[0]) + (sy - YI[0]) * (sy - YI[0])),
            sqrt((sx - XI[1]) * (sx - XI[1]) + (sy - YI[1]) * (sy - YI[1]))) +
        min(sqrt((ex - XI[0]) * (ex - XI[0]) + (ey - YI[0]) * (ey - YI[0])),
            sqrt((ex - XI[1]) * (ex - XI[1]) + (ey - YI[1]) * (ey - YI[1])));
    assert(fabs(s +
                sqrt((XI[0] - XI[1]) * (XI[0] - XI[1]) +
                     (YI[0] - YI[1]) * (YI[0] - YI[1])) -
                sqrt((sx - ex) * (sx - ex) + (sy - ey) * (sy - ey))) < 1e-10);
    s2 = s + 2 * sqrt((XI[0] - XI[1]) * (XI[0] - XI[1]) +
                      (YI[0] - YI[1]) * (YI[0] - YI[1]));
    assert(I[0] != I[1]);
    s3 = sqrt((XI[0] - X[I[0] + 1]) * (XI[0] - X[I[0] + 1]) +
              (YI[0] - Y[I[0] + 1]) * (YI[0] - Y[I[0] + 1])) +
         sqrt((XI[1] - X[I[1]]) * (XI[1] - X[I[1]]) +
              (YI[1] - Y[I[1]]) * (YI[1] - Y[I[1]]));
    for (j = (I[0] + 1) % n; j != I[1]; j = (j + 1) % n)
      s3 += sqrt((X[j] - X[j + 1]) * (X[j] - X[j + 1]) +
                 (Y[j] - Y[j + 1]) * (Y[j] - Y[j + 1]));
    for (j = 0; j < n; j++)
      z += sqrt((X[j] - X[j + 1]) * (X[j] - X[j + 1]) +
                (Y[j] - Y[j + 1]) * (Y[j] - Y[j + 1]));
    mn = min(s2, min(s + s3, z - s3 + s));
  } else
    mn = sqrt((sx - ex) * (sx - ex) + (sy - ey) * (sy - ey));
  printf("%.10lf", mn);
  return 0;
}
