Problem: As I was cleaning up the warehouse, I found an old document that describes how to get to the treasures of my ancestors. The following was written in this ancient document.


1. First, stand 1m east of the well on the outskirts of the town and turn straight toward the well.
2. Turn clockwise 90 degrees, go straight for 1m, and turn straight toward the well.
3. Turn clockwise 90 degrees, go straight for 1m, and turn straight toward the well.
Four.                   〃
Five.                   〃
6::


From the second line onward, exactly the same thing was written. You wanted to find the treasure, but found it awkward. Unlike in the past, the building is in the way, and you can't see the well even if you go straight in the direction of the well, or you can't go straight even if you try to go straight for 1m. In addition, this ancient document has nearly 1000 lines, and it takes a considerable amount of time and physical strength to work according to the ancient document. Fortunately, however, you can take advantage of your computer.

Enter the number of lines n written in the old document and create a program that outputs the location of the treasure. However, n is a positive integer between 2 and 1,000.



input

Given multiple datasets. For each dataset, one integer n, which represents the number of lines in the old document, is given on each line.

The input ends with -1. The number of datasets does not exceed 50.

output

Assuming that there is a treasure at the position x (m) to the east and y (m) to the north from the well on the outskirts of the town, output each data set in the following format.


x
y


The output is a real number and may contain an error of 0.01 or less.

Example

Input

3
6
-1


Output

0.29
1.71
-2.31
0.80

Solution (in CPP):

Solution:
#include <iostream>
#include <cmath>
#define EPS (1e-10)
#define equals(a, b) (fabs((a) - (b)) < EPS)
using namespace std;

class Point{
public:
  double x, y;
  Point(double x=0, double y=0):x(x), y(y){}
  Point operator + (Point p){ return Point(x+p.x, y+p.x);}
  Point operator - (Point p){ return Point(x-p.x, y-p.y);}
  Point operator * (double a){ return Point(a*x, a*y);}
  double abs(){ return sqrt(norm());}
  double norm(){ return x*x+y*y;}
  bool operator < (const Point &p) const{
    return x != p.x ? x < p.x : y < p.y;
  }
  bool operator == (const Point &p) const{
    return fabs(x-p.x) < EPS && fabs(y-p.y) < EPS;
  }
};

int main(){
  int n;
  double ansx[1000];
  double ansy[1000];
  ansx[0]=1.0;
  ansy[0]=0.0;

  for(int i=1;i<1000;i++){
    Point a, b, c;
    a.x=a.y=0.0;
    b.x=ansx[i-1];
    b.y=ansy[i-1];
    double t=atan(1.0/(b-a).abs());
    c.x=cos(t)*b.x-sin(t)*b.y;
    c.y=sin(t)*b.x+cos(t)*b.y;
    double tn=c.abs();
    double tmp=sqrt((b-a).abs()*(b-a).abs()+1);
    c.x=c.x/tn*tmp;
    c.y=c.y/tn*tmp;
    ansx[i]=c.x;
    ansy[i]=c.y;
    } 
  while(1){
    cin >> n;
    if(n==-1) break;
    printf("%.2f\n%.2f\n", ansx[n-1], ansy[n-1]);
  }
  return 0;
}