#include <bits/stdc++.h>
using namespace std;
const int MAX = 3e5 + 10;
const long long MOD = 1e9 + 7;
const int INF = 0x3f3f3f3f;
const long long LLINF = 0x3f3f3f3f3f3f3f3f;
const long double EPS = 1e-8;
const long double PI = acos(-1);
bool eq(long double a, long double b) { return fabsl(a - b) <= EPS; }
struct point {
  long double x, y;
  int id;
  point(long double x = 0, long double y = 0) : x(x), y(y) {}
  point operator+(const point &o) const { return {x + o.x, y + o.y}; }
  point operator-(const point &o) const { return {x - o.x, y - o.y}; }
  point operator*(long double t) const { return {x * t, y * t}; }
  point operator/(long double t) const { return {x / t, y / t}; }
  long double operator*(const point &o) const { return x * o.x + y * o.y; }
  long double operator^(const point &o) const { return x * o.y - y * o.x; }
  bool operator<(const point &o) const {
    if (!eq(x, o.x)) return x < o.x;
    return y < o.y;
  }
  bool operator==(const point &o) const { return eq(x, o.x) and eq(y, o.y); }
};
long double norm(point a) { return sqrt(a * a); }
point rotccw(point p, long double a) {
  a = acos(-1) * a / 180;
  return point((p.x * cos(a) - p.y * sin(a)), (p.y * cos(a) + p.x * sin(a)));
}
int ccw(point a, point b, point e) {
  long double tmp = (b - a) ^ (e - a);
  return (tmp > EPS) - (tmp < -EPS);
}
struct line {
  point p1, p2;
  long double a, b, c;
  line(point p1 = 0, point p2 = 0) : p1(p1), p2(p2) {
    a = p1.y - p2.y;
    b = p2.x - p1.x;
    c = -(a * p1.x + b * p1.y);
  }
  line(long double a = 0, long double b = 0, long double c = 0)
      : a(a), b(b), c(c) {}
  long double eval(point p) { return a * p.x + b * p.y + c; }
  bool inside(point p) { return eq(eval(p), 0); }
  point normal() { return point(a, b); }
  bool inside_seg(point p) {
    return (inside(p) and min(p1.x, p2.x) <= p.x and p.x <= max(p1.x, p2.x) and
            min(p1.y, p2.y) <= p.y and p.y <= max(p1.y, p2.y));
  }
};
point inter(line &l1, line &l2) {
  long double det = l1.a * l2.b - l1.b * l2.a;
  if (det == 0) return point(INF, INF);
  long double x = (l1.b * l2.c - l1.c * l2.b) / det;
  long double y = (l1.c * l2.a - l1.a * l2.c) / det;
  return point(x, y);
}
int32_t main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  ;
  int n;
  cin >> n;
  if (n <= 4) {
    cout << "No solution\n";
    return 0;
  }
  point p = point(500, 500);
  vector<point> poly;
  for (int i = 0; i < n; i++)
    poly.push_back(p + rotccw(point(0, 490), i * 360 / (long double)n));
  vector<line> lines;
  for (int i = 0; i < n; i++) lines.push_back(line(poly[i], poly[(i + 1) % n]));
  long double delta = (n < 50 ? 1 : 0.5);
  long double k = 1;
  for (int i = 0; i < n; i++) {
    if (ccw(lines[i].p1, lines[i].p2, poly[(i + 2) % n]) == 1)
      lines[i].c += k;
    else
      lines[i].c -= k;
    k += delta;
  }
  cout << fixed << setprecision(12);
  for (int i = 0; i < n; i++) {
    point p = inter(lines[i], lines[(i + 1) % n]);
    cout << p.x << " " << p.y << '\n';
  }
  return 0;
}
