#include <bits/stdc++.h>
using namespace std;
struct vectStruct {
  double x;
  double y;
  vectStruct(double a, double b) {
    x = a;
    y = b;
  }
  vectStruct() {}
  vectStruct operator+(vectStruct &v) { return vectStruct(x + v.x, y + v.y); }
  vectStruct operator-(vectStruct &v) { return vectStruct(x - v.x, y - v.y); }
};
double norm(vectStruct v) { return sqrt(v.x * v.x + v.y * v.y); }
bool intersect(vectStruct &start, vectStruct &finish, vectStruct &v1,
               vectStruct &v2, vectStruct &p) {
  double a1, b1, c1, a2, b2, c2;
  bool ans = false;
  a1 = (start.y - finish.y);
  b1 = -(start.x - finish.x);
  c1 = -(a1 * start.x + b1 * start.y);
  a2 = (v1.y - v2.y);
  b2 = -(v1.x - v2.x);
  c2 = -(a2 * v1.x + b2 * v1.y);
  if (abs(a1 * b2 - a2 * b1) < 0.0000000000001) return false;
  if (((v1.x * a1 + v1.y * b1 + c1) * (v2.x * a1 + v2.y * b1 + c1) <
       -0.0000000000001) &&
      ((start.x * a2 + start.y * b2 + c2) *
           (finish.x * a2 + finish.y * b2 + c2) <
       -0.0000000000001)) {
    ans = true;
  } else {
    return false;
  }
  double x, y;
  y = (-a1 * c2 + a2 * c1) / (a1 * b2 - a2 * b1);
  x = (b1 * c2 - b2 * c1) / (a1 * b2 - a2 * b1);
  p.x = x;
  p.y = y;
  return true;
}
vectStruct start, finish;
int n;
vector<vectStruct> mas;
int main() {
  double ans1;
  cin >> start.x >> start.y >> finish.x >> finish.y;
  cin >> n;
  for (int i = 0; i < n; ++i) {
    double a, b;
    cin >> a >> b;
    mas.push_back(vectStruct(a, b));
  }
  ans1 = norm(start - finish);
  int num[5];
  vectStruct per[5];
  int stch = 0;
  for (int i = 0; i < n; ++i) {
    vectStruct p;
    if (intersect(start, finish, mas[i], mas[(i + 1) % n], p)) {
      num[stch] = i;
      per[stch] = p;
      stch++;
    }
  }
  if (stch < 2) {
    double a1, b1, c1;
    a1 = (start.y - finish.y);
    b1 = -(start.x - finish.x);
    c1 = -(a1 * start.x + b1 * start.y);
    for (int i = 0; i < n; ++i)
      if (abs(a1 * mas[i].x + b1 * mas[i].y + c1) < 0.0000000000001) {
        num[stch] = i;
        per[stch] = mas[i];
        stch++;
      }
  }
  if (stch < 2) {
    cout << fixed << setprecision(9) << ans1;
    return 0;
  }
  double ans2 = norm(per[0] - per[1]);
  double dl1 = 0, dl2 = 0;
  dl1 += norm(per[0] - mas[(num[0] + 1) % n]);
  int kon;
  if (num[1] < num[0])
    kon = num[1] + n;
  else
    kon = num[1];
  for (int i = num[0] + 1; i < kon; ++i) {
    dl1 += norm(mas[i % n] - mas[(i + 1) % n]);
  }
  dl1 += norm(per[1] - mas[num[1]]);
  dl2 += norm(per[1] - mas[(num[1] + 1) % n]);
  if (num[0] < num[1])
    kon = num[0] + n;
  else
    kon = num[0];
  for (int i = num[1] + 1; i < kon; ++i) {
    dl2 += norm(mas[i % n] - mas[(i + 1) % n]);
  }
  dl2 += norm(per[0] - mas[num[0]]);
  double dl = (dl1 < dl2) ? dl1 : dl2;
  ans1 -= ans2;
  if ((ans1 + ans2 * 2) < (ans1 + dl)) {
    cout << fixed << setprecision(9) << (ans1 + ans2 * 2) << endl;
  } else
    cout << fixed << setprecision(9) << (ans1 + dl) << endl;
  return 0;
}
