#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-10;
struct rec {
  double x, y;
} a[110], s, e, f[2];
int g[2], n, m, i;
double ans;
double XJ(rec a, rec b, rec c) {
  return (b.x - a.x) * (c.y - a.y) - (b.y - a.y) * (c.x - a.x);
}
double dist(rec a, rec b) {
  return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
}
void cross(rec a, rec b, rec c, rec d) {
  double t1 = XJ(a, c, b), t2 = XJ(a, b, d), t3 = XJ(c, a, d), t4 = XJ(c, d, b);
  if (fabs(t1) < eps && fabs(t2) < eps) return;
  if (fabs(dist(a, c) + dist(b, c) - dist(a, b)) < eps) {
    f[m] = c;
    g[m++] = i;
    return;
  }
  if (t1 * t2 > eps && t3 * t4 > eps) {
    f[m].x = (t1 * d.x + t2 * c.x) / (t1 + t2);
    f[m].y = (t1 * d.y + t2 * c.y) / (t1 + t2);
    g[m++] = i;
    return;
  }
}
double calc(int st, int ed, int s, int e) {
  if (ed == 1)
    ed = n;
  else
    ed--;
  double ans = dist(f[s], a[st]);
  for (int i = st; i != ed; i == n ? i = 1 : i++)
    ans += dist(a[i], a[i == n ? 1 : i + 1]);
  return ans + dist(a[ed], f[e]);
}
int main() {
  scanf("%lf%lf%lf%lf%d", &s.x, &s.y, &e.x, &e.y, &n);
  for (i = 1; i <= n; i++) cin >> a[i].x >> a[i].y;
  a[0] = a[n];
  for (i = 1; i <= n; i++) cross(s, e, a[i - 1], a[i]);
  if (m > 1) {
    if (dist(s, f[0]) > dist(s, f[1])) swap(f[0], f[1]), swap(g[0], g[1]);
    ans = min(calc(g[0], g[1], 0, 1), calc(g[1], g[0], 1, 0));
    ans = min(ans, 2 * dist(f[0], f[1]));
    ans += dist(s, f[0]) + dist(f[1], e);
  } else
    ans = dist(s, e);
  printf("%.10lf\n", ans);
  return 0;
}
