#include <bits/stdc++.h>
using namespace std;
complex<double> p[1000];
complex<double> u, v;
complex<double> v1, v2;
int n;
double a1, b1, c1;
double a2, b2, c2;
double det, XX1, YY1;
double l[1000];
double uu[1000];
void check() {
  p[n + 1] = p[1];
  p[0] = p[n];
  for (int i = 1; i <= n; ++i) {
    complex<double> v1 = p[i + 1] - p[i];
    complex<double> v2 = p[i] - p[i - 1];
    uu[i] = arg(v2 / v1) / 3.1415926535897932384626433832795 * 180;
    l[i] = abs(v1);
    printf("len = %.5f   arg=%f\n", abs(p[i + 1] - p[i]),
           arg(v2 / v1) / 3.1415926535897932384626433832795 * 180);
    if (abs(uu[i] - 360.0 / n) < 1e-3) printf("uuu!\n");
  };
  for (int i = 1; i <= n; ++i)
    for (int j = i + 1; j <= n; ++j)
      if (abs(l[i] - l[j]) < 1e-3) printf("lll!\n");
}
int main() {
  scanf("%i", &n);
  if (n < 5)
    printf("No solution\n");
  else {
    u = complex<double>(cos(2.0 * 3.1415926535897932384626433832795 / n),
                        sin(2.0 * 3.1415926535897932384626433832795 / n));
    v = complex<double>(690, 0.0);
    p[1] = complex<double>(0.0, 0.0);
    for (int i = 2; i <= n - 1; ++i) {
      p[i] = p[i - 1] + v;
      v = v * u;
      v = v * (abs(v) - 0.01) / abs(v);
    }
    v1 = v;
    v2 = v * u;
    a1 = v1.real();
    b1 = v2.real();
    c1 = p[1].real() - p[n - 1].real();
    a2 = v1.imag();
    b2 = v2.imag();
    c2 = p[1].imag() - p[n - 1].imag();
    det = a1 * b2 - a2 * b1;
    XX1 = (c1 * b2 - c2 * b1) / det;
    YY1 = (a1 * c2 - a2 * c1) / det;
    p[n] = p[n - 1] + XX1 * v1;
    p[n + 1] = p[n];
    for (int i = 1; i <= n; ++i)
      printf("%.9f %.9f\n", p[i].real(), p[i].imag());
  }
  return 0;
}
