#include <bits/stdc++.h>
using namespace std;
const long double pi = acos(-1.0);
const long double _eps = 0.001;
const int N = 103;
inline double rnd() { return rand() * 1.0 / RAND_MAX; }
int main() {
  srand(time(0));
  int n;
  long double x[N], y[N];
  x[0] = y[0] = 0;
  cin >> n;
  if (n < 5) return puts("No solution"), 0;
  long double ang = 0;
  long double delta = 2 * pi / n;
  for (;;) {
    long double d = rnd() * 512;
    double eps = _eps + (rand() % 10 * 0.0001);
    for (int i = 1; i < n - 1; i++) {
      ang += delta;
      x[i] = x[i - 1] + (d + eps * (i)) * cos(ang);
      y[i] = y[i - 1] + (d + eps * (i)) * sin(ang);
    }
    ang += delta;
    long double x1 = x[0], y1 = y[0], x2 = x[n - 2], y2 = y[n - 2];
    long double a1 = -cos(ang + delta), b1 = -sin(ang + delta);
    long double a2 = cos(ang), b2 = sin(ang);
    a2 *= -1, b2 *= -1;
    x2 -= x1, y2 -= y1;
    long double s = (x2 * b2 - y2 * a2) / (a1 * b2 - b1 * a2);
    x[n - 1] = x1 + s * a1;
    y[n - 1] = y1 + s * b1;
    auto sqr = [](long double x) { return x * x; };
    auto dis = [x, y, sqr](int i, int j) {
      return sqrt(sqr(x[i] - x[j]) + sqr(y[i] - y[j]));
    };
    vector<long double> tmp;
    tmp.clear();
    for (int i = 0; i < n; i++) tmp.push_back(dis(i, (i + 1) % n));
    sort(tmp.begin(), tmp.end());
    int flag = 1;
    for (int i = 0; i < n - 1; i++)
      if (tmp[i] + 0.001 >= tmp[i + 1]) {
        flag = 0;
        break;
      }
    if (flag) break;
  }
  for (int i = 0; i < n; i++)
    printf("%.10lf %.10lf\n", (double)x[i], (double)y[i]);
  ;
  return 0;
}
