#include<bits/stdc++.h>

#define REP(i,s,n) for(int i=s;i<n;i++)
#define rep(i,n) REP(i,0,n)

using namespace std;

int N;
double memo[1010][1010];

double dfs(int n,int m){ // n -> already know, m -> unknown
  assert( m >= n );
  if( n >= m ) return 0.0;
  if( memo[n][m] >= 0 ) return memo[n][m];
  double ret = 0;
  // 一枚目が既知のカード

  double know_p = ( (double)n / (double)m );
  if( n )  ret += dfs(n-1,m-1) * know_p;

  // 一枚目がしらないカード
  double unknown_p = 1 - know_p;
  if( m - n >= 1 ) {
    // 二枚目も知らないカード
    if( m - n >= 2 && n+2 <= m-2 ) {
      double unknown = ( m - 1 - n ) ;
      double np = unknown_p * ( (unknown-1) / (double)(m-1) );
      ret += ( 1 + dfs(n+2,m-2) ) * np;
    }
    // 二枚目が偶然知っているカード
    // １枚目と同じ
    if( m - n >= 2 ) { 
      double np = unknown_p * ( 1.0 / (double)(m-1) );
      ret += dfs(n,m-2) * np;
    }

    // １枚目と同じではないが知っているカー土 
    if( n ) {
      double np = unknown_p * ( n / (double)(m-1) );
      ret += ( 1 + dfs(n,m-2) ) *  np ;
    }
  }
  return memo[n][m] = ret;
}

int main(){
  while( cin >> N, N ){
    rep(i,1010)rep(j,1010) memo[i][j] = -1;
    printf("%.8f\n",dfs(0,N));
  }
  return 0;
}