#include <bits/stdc++.h>
using namespace std;
template <typename Arg1>
void __f(const char* name, Arg1&& arg1) {
  cerr << name << " : " << arg1 << std::endl;
}
template <typename Arg1, typename... Args>
void __f(const char* names, Arg1&& arg1, Args&&... args) {
  const char* comma = strchr(names + 1, ',');
  cerr.write(names, comma - names) << " : " << arg1 << " | ";
  __f(comma + 1, args...);
}
const long long oo = INT_MAX;
const long long MOD = 1e9 + 7;
const long long sz = 1e5 + 5;
int32_t main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  ;
  long long tc = 1;
  while (tc--) {
    long long n;
    cin >> n;
    vector<pair<long long, long long>> pts(n);
    for (auto& pt : pts) cin >> pt.first >> pt.second;
    double ret = 1e18;
    function<double(double)> sq = [=](double s) { return ((s) * (s)); };
    function<double(long long, long long, long long)> dis =
        [&](long long i1, long long i2, long long i3) {
          return ((abs((pts[i2].first - pts[i1].first) *
                           (pts[i1].second - pts[i3].second) -
                       (pts[i2].second - pts[i1].second) *
                           (pts[i1].first - pts[i3].first)) /
                   sqrt(sq(pts[i1].first - pts[i2].first) +
                        sq(pts[i1].second - pts[i2].second))) /
                  2);
        };
    for (long long i = 0; i < n; ++i) {
      long long i2 = (i + 1) % n, i3 = (i + 2) % n;
      ret = min(ret, dis(i, i3, i2));
    }
    cout << fixed << setprecision(10) << ret << "\n";
  }
}
