#include <bits/stdc++.h>
int x[110], y[110], pos[2];
double jx[10], jy[10];
int main() {
  int sx, sy, ex, ey;
  while (scanf("%d%d%d%d", &sx, &sy, &ex, &ey) == 4) {
    int n;
    scanf("%d", &n);
    for (int i = 0; i < n; i++) scanf("%d%d", &x[i], &y[i]);
    x[n] = x[0];
    y[n] = y[0];
    int cntt = 0;
    double sum = 0;
    for (int i = 0; i < n; i++) {
      sum += sqrt((x[i] - x[i + 1]) * (x[i] - x[i + 1]) +
                  (y[i] - y[i + 1]) * (y[i] - y[i + 1]));
      int dx1 = x[i] - sx, dx2 = x[i] - ex;
      int dy1 = y[i] - sy, dy2 = y[i] - ey;
      int num1 = dx1 * dy2 - dx2 * dy1;
      dx1 = x[i + 1] - sx;
      dx2 = x[i + 1] - ex;
      dy1 = y[i + 1] - sy;
      dy2 = y[i + 1] - ey;
      int num2 = dx1 * dy2 - dx2 * dy1;
      dx1 = x[i] - sx;
      dx2 = x[i + 1] - sx;
      dy1 = y[i] - sy;
      dy2 = y[i + 1] - sy;
      int num3 = dx1 * dy2 - dx2 * dy1;
      dx1 = x[i] - ex;
      dx2 = x[i + 1] - ex;
      dy1 = y[i] - ey;
      dy2 = y[i + 1] - ey;
      int num4 = dx1 * dy2 - dx2 * dy1;
      if (num1 * num2 <= 0 && num3 * num4 <= 0) {
        double A, B, C, D, E, F;
        A = y[i] - y[i + 1];
        B = x[i + 1] - x[i];
        C = x[i + 1] * y[i] - x[i] * y[i + 1];
        D = sy - ey;
        E = ex - sx;
        F = ex * sy - sx * ey;
        if (fabs(A * E - D * B) < 1e-10) continue;
        jx[cntt] = (C * E - F * B) / (A * E - D * B);
        jy[cntt] = (C * D - F * A) / (B * D - A * E);
        pos[cntt] = i;
        bool find = false;
        for (int i = 0; i < cntt; i++) {
          if (fabs(jx[i] - jx[cntt]) < 1e-8 && fabs(jy[i] - jy[cntt]) < 1e-8)
            find = true;
        }
        if (!find) cntt++;
      }
    }
    if (cntt != 2) {
      double diss = sqrt((ex - sx) * (ex - sx) + (ey - sy) * (ey - sy));
      printf("%.10f\n", diss);
    } else {
      double dis1 = sqrt((jx[0] - jx[1]) * (jx[0] - jx[1]) +
                         (jy[0] - jy[1]) * (jy[0] - jy[1]));
      double diss = sqrt((sx - ex) * (sx - ex) + (sy - ey) * (sy - ey)) - dis1;
      dis1 *= 2;
      double dis2 = 0, dis3 = 0;
      for (int i = pos[0]; i <= pos[1]; i++) {
        if (i == pos[0])
          dis2 += sqrt((x[i + 1] - jx[0]) * (x[i + 1] - jx[0]) +
                       (y[i + 1] - jy[0]) * (y[i + 1] - jy[0]));
        else if (i == pos[1])
          dis2 += sqrt((x[i] - jx[1]) * (x[i] - jx[1]) +
                       (y[i] - jy[1]) * (y[i] - jy[1]));
        else
          dis2 += sqrt((x[i + 1] - x[i]) * (x[i + 1] - x[i]) +
                       (y[i + 1] - y[i]) * (y[i + 1] - y[i]));
      }
      dis3 = sum - dis2;
      if (dis1 > dis2) dis1 = dis2;
      if (dis1 > dis3) dis1 = dis3;
      printf("%.10f\n", diss + dis1);
    }
  }
  return 0;
}
