#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-9;
const double pi = acos(-1);
const int maxn = 105;
struct Point {
  double x, y;
  Point() {}
  Point(double x, double y) : x(x), y(y) {}
} p[maxn];
Point operator+(Point a, Point b) { return Point(a.x + b.x, a.y + b.y); }
Point operator-(Point a, Point b) { return Point(a.x - b.x, a.y - b.y); }
Point operator*(Point a, double q) { return Point(a.x * q, a.y * q); }
Point operator/(Point a, double q) { return Point(a.x / q, a.y / q); }
double Dot(Point a, Point b) { return a.x * b.x + a.y * b.y; }
double Length(Point a) { return sqrt(Dot(a, a)); }
double Cross(Point a, Point b) { return a.x * b.y - a.y * b.x; }
Point Rotate(Point a, double rad) {
  return Point(a.x * cos(rad) - a.y * sin(rad),
               a.x * sin(rad) + a.y * cos(rad));
}
Point Have_Len(Point a, double L) { return a / Length(a) * L; }
double Angle(Point a, Point b) {
  return acos(Dot(a, b) / Length(a) / Length(b));
}
Point GetLineInter(Point P, Point v, Point Q, Point w) {
  Point u = P - Q;
  double t = Cross(w, u) / Cross(v, w);
  return P + v * t;
}
int n;
int main() {
  srand((int)time(NULL));
  scanf("%d", &n);
  if (n <= 4) return 0 * printf("No solution\n");
  double lens = 500.0, f = 5.0,
         ang = (180 + (n - 3) * 180) * 1.0 * pi / n / 180.0;
  ang = pi - ang;
  p[1] = Point(0.0, 0.0);
  p[2] = Point(500.0, 0);
  Point tmp = p[2] - p[1], nex;
  for (int i = 3; i <= n; i++) {
    lens = lens + 0.01;
    nex = Rotate(tmp, ang);
    if (i == n) break;
    nex = Have_Len(nex, lens);
    p[i] = p[i - 1] + nex;
    tmp = nex;
  }
  Point Bac = Rotate(Point(10.0, 0), pi - ang);
  p[n] = GetLineInter(p[n - 1], nex, p[1], Bac);
  for (int i = 1; i <= n; i++) {
    printf("%.3f %.3f\n", p[i].x, p[i].y);
  }
  return 0;
}
