#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100 + 10;
const double EPS = 1e-10;
pair<double, double> operator+(const pair<double, double> &a,
                               const pair<double, double> &b) {
  return make_pair(a.first + b.first, a.second + b.second);
}
pair<double, double> operator-(const pair<double, double> &a,
                               const pair<double, double> &b) {
  return make_pair(a.first - b.first, a.second - b.second);
}
pair<double, double> operator*(const pair<double, double> &a, double k) {
  return make_pair(a.first * k, a.second * k);
}
pair<double, double> operator/(const pair<double, double> &a, double k) {
  return make_pair(a.first / k, a.second / k);
}
double det(const pair<double, double> &a, const pair<double, double> &b) {
  return a.first * b.second - b.first * a.second;
}
bool operator==(const pair<double, double> &a, const pair<double, double> &b) {
  return fabs(a.first - b.first) < EPS && fabs(a.second - b.second) < EPS;
}
int CMP(double s) {
  if (fabs(s) < EPS) return 0;
  if (s > 0) return 1;
  return -1;
}
double sqr(double first) { return first * first; }
double dist(const pair<double, double> &a, const pair<double, double> &b) {
  return sqrt(sqr(a.first - b.first) + sqr(a.second - b.second));
}
pair<double, double> intersect(const pair<double, double> &a,
                               const pair<double, double> &b,
                               const pair<double, double> &c,
                               const pair<double, double> &d) {
  double k1 = det(b - a, c - a), k2 = det(b - a, d - a);
  if (fabs(k1 - k2) < EPS) return make_pair(-MAXN, -MAXN);
  return (d * k1 - c * k2) / (k1 - k2);
}
pair<double, double> S, T, A, B, p[MAXN];
double dis[3], CC;
int n;
void init() {
  cin >> S.first >> S.second >> T.first >> T.second;
  cin >> n;
  for (int i = 1; i <= n; ++i) cin >> p[i].first >> p[i].second;
}
void solve() {
  A = B = make_pair(-MAXN, -MAXN);
  for (int i = 1; i <= n; ++i) {
    int j = (i + 1 > n) ? 1 : (i + 1);
    int s1 = CMP(det(T - S, p[i] - S)), s2 = CMP(det(T - S, p[j] - S));
    if (s1 == 0 && s2 == 0) printf("%.10lf\n", dist(S, T)), exit(0);
    if (s1 + s2 == 0) {
      pair<double, double> H = intersect(S, T, p[i], p[j]);
      if (!(min(S.first, T.first) < H.first + EPS &&
            H.first < max(S.first, T.first) + EPS))
        printf("%.10lf\n", dist(S, T)), exit(0);
      if (!(A == make_pair(-MAXN, -MAXN)))
        B = H;
      else
        A = H;
      dis[s1 + 1] += dist(p[i], H);
      dis[s2 + 1] += dist(p[j], H);
    } else if (s1 == 0 || s2 == 0) {
      pair<double, double> H = (s1 == 0) ? p[i] : p[j];
      dis[((s1 == 0) ? s2 : s1) + 1] += dist(p[i], p[j]);
      if (!(A == make_pair(-MAXN, -MAXN)) && !(A == H))
        B = H;
      else
        A = H;
    } else
      dis[s1 + 1] += dist(p[i], p[j]);
  }
  if (B == make_pair(-MAXN, -MAXN)) printf("%.10lf\n", dist(S, T)), exit(0);
  dis[1] = dist(A, B) * 2.0;
  if (dist(S, A) > dist(S, B)) swap(A, B);
  printf("%.10lf\n",
         min(dis[0], min(dis[1], dis[2])) + dist(S, A) + dist(B, T));
}
int main() {
  init();
  solve();
  fclose(stdin);
  fclose(stdout);
  return 0;
}
