#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-10;
pair<double, double> a[110], s, e, f[2];
int g[2], n, m, i;
double Cross(pair<double, double> first, pair<double, double> second,
             pair<double, double> z) {
  return (second.first - first.first) * (z.second - first.second) -
         (second.second - first.second) * (z.first - first.first);
}
double Dis(pair<double, double> first, pair<double, double> second) {
  return sqrt((first.first - second.first) * (first.first - second.first) +
              (first.second - second.second) * (first.second - second.second));
}
void work(pair<double, double> a, pair<double, double> b,
          pair<double, double> c, pair<double, double> d) {
  double t1 = Cross(a, c, b), t2 = Cross(a, b, d), t3 = Cross(c, a, d),
         t4 = Cross(c, d, b);
  if (fabs(t1) < eps && fabs(t2) < eps) return;
  if (fabs(Dis(a, c) + Dis(b, c) - Dis(a, b)) < eps) {
    f[m] = c;
    g[m++] = i;
    return;
  }
  if (t1 * t2 > eps && t3 * t4 > eps) {
    f[m].first = (t1 * d.first + t2 * c.first) / (t1 + t2);
    f[m].second = (t1 * d.second + t2 * c.second) / (t1 + t2);
    g[m++] = i;
    return;
  }
}
double calc(int first, int second, int s, int e) {
  second = second == 1 ? n : second - 1;
  double ans = Dis(f[s], a[first]);
  for (int i = first; i != second; i == n ? i = 1 : i++)
    ans += Dis(a[i], a[i == n ? 1 : i + 1]);
  return ans + Dis(a[second], f[e]);
}
int main() {
  double ans = 0;
  scanf("%lf%lf%lf%lf%d", &s.first, &s.second, &e.first, &e.second, &n);
  for (i = 1; i <= n; i++) scanf("%lf%lf", &a[i].first, &a[i].second);
  a[0] = a[n];
  for (i = 1; i <= n; i++) work(s, e, a[i - 1], a[i]);
  if (m > 1) {
    if (Dis(s, f[0]) > Dis(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 * Dis(f[0], f[1]));
    ans += Dis(s, f[0]) + Dis(f[1], e);
  } else
    ans = Dis(s, e);
  printf("%.20lf\n", ans);
  return 0;
}
