#include <bits/stdc++.h>
using namespace std;
template <typename P, unsigned long long int mod>
class Mod {
 public:
  Mod() : v_() {}

 public:
  template <typename V>
  P& operator=(const V&& rv) {
    static_assert(std::is_integral<V>::value, "should be integral type");
    v_ = rv;
    return v_;
  }
  template <typename V>
  P& operator+=(const V&& rv) {
    static_assert(std::is_integral<V>::value, "should be integral type");
    v_ += rv;
    return v_;
  }

 private:
  P v_;
};
const int sz = 1e5;
double crossp(complex<double> a, complex<double> b) {
  return imag(conj(a) * b);
}
double Dot(complex<double> a, complex<double> b) { return real(conj(a) * b); }
double Len(complex<double> a) { return sqrt(Dot(a, a)); }
double dist(complex<double> p, complex<double> a, complex<double> b) {
  complex<double> v1 = b - a;
  complex<double> v2 = p - a;
  return fabs(crossp(v1, v2)) / Len(v1);
}
int main() {
  ios::sync_with_stdio(false);
  int n;
  cin >> n;
  vector<complex<double> > point;
  for (int i = 0; i < n; ++i) {
    pair<double, double> x;
    cin >> x.first >> x.second;
    point.emplace_back(x.first, x.second);
  }
  point.push_back(point[0]);
  point.push_back(point[1]);
  double m = 1e9 + 5;
  for (int i = 0; i < point.size() - 2; ++i) {
    double d = dist(point[i + 1], point[i], point[i + 2]);
    m = min(m, d / 2);
  }
  cout << setprecision(10) << m << endl;
}
