#include <bits/stdc++.h>
using namespace std;
struct point {
  double x, y;
};
const double zero = 0.0000001, inf = 100000000.0;
point p[35];
double f[35][35], d[35];
bool ok[35];
double dis(point a, point b) {
  return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
}
double cross(point a, point b, point c, point d) {
  double x1 = b.x - a.x, y1 = b.y - a.y, x2 = d.x - c.x, y2 = d.y - c.y;
  return x1 * y2 - y1 * x2;
}
point intersect(point a, point b, point c, point d) {
  double l = cross(a, c, c, d) / cross(a, b, c, d);
  point q;
  q.x = a.x + l * (b.x - a.x);
  q.y = a.y + l * (b.y - a.y);
  return q;
}
int main(void) {
  scanf("%lf %lf %lf %lf", &p[0].x, &p[0].y, &p[1].x, &p[1].y);
  int n;
  scanf("%d", &n);
  for (int i = 0; i <= n + 3; ++i)
    for (int j = 0; j <= n + 3; ++j) f[i][j] = inf;
  p[n + 1] = p[1];
  for (int i = 1; i <= n; ++i) scanf("%lf %lf", &p[i].x, &p[i].y);
  int m = n + 1;
  for (int i = 1; i <= n; ++i) {
    int j = i % n + 1;
    f[i][j] = dis(p[i], p[j]);
    f[j][i] = f[i][j];
    if (cross(p[i], p[j], p[i], p[0]) * cross(p[i], p[j], p[i], p[n + 1]) < 0) {
      double k =
          cross(p[0], p[n + 1], p[0], p[i]) * cross(p[0], p[n + 1], p[0], p[j]);
      if (k > 0)
        continue;
      else if (k < 0) {
        p[++m] = intersect(p[0], p[n + 1], p[i], p[j]);
        f[m][i] = dis(p[m], p[i]);
        f[i][m] = f[m][i];
        f[m][j] = dis(p[m], p[j]);
        f[j][m] = f[m][j];
      } else {
        point q = intersect(p[0], p[n + 1], p[i], p[j]);
        if ((abs(p[i].x - q.x) < zero) && (abs(p[i].y - q.y) < zero)) {
          p[++m] = q;
          f[m][i] = dis(p[m], p[i]);
          f[i][m] = f[m][i];
          f[m][j] = dis(p[m], p[j]);
          f[j][m] = f[m][j];
        }
      }
    }
  }
  if (m < n + 3) {
    printf("%.10lf\n", dis(p[0], p[n + 1]));
    return 0;
  }
  if (dis(p[0], p[n + 2]) < dis(p[0], p[n + 3])) {
    f[0][n + 2] = dis(p[0], p[n + 2]);
    f[n + 3][n + 1] = dis(p[n + 1], p[n + 3]);
  } else {
    f[0][n + 3] = dis(p[0], p[n + 3]);
    f[n + 2][n + 1] = dis(p[n + 1], p[n + 2]);
  }
  f[n + 2][n + 3] = 2 * dis(p[n + 2], p[n + 3]);
  f[n + 3][n + 2] = f[n + 2][n + 3];
  for (int i = 0; i <= m; ++i) {
    d[i] = f[0][i];
    ok[i] = true;
  }
  ok[0] = false;
  for (int i = 1; i < m; ++i) {
    double mi = inf;
    int k = 0;
    for (int j = 1; j <= m; ++j) {
      if ((ok[j]) && (d[j] < mi)) {
        mi = d[j];
        k = j;
      }
    }
    if (k == n + 1) break;
    ok[k] = false;
    for (int j = 1; j <= m; ++j)
      if (ok[j]) d[j] = min(d[j], d[k] + f[k][j]);
  }
  printf("%.10lf\n", d[n + 1]);
  return 0;
}
