
import java.util.*;

public class ManualShuffle {

  public static void main(String[] args) {

    int numIter = Integer.parseInt(args[0]);
    int n = (args.length > 1) ? Integer.parseInt(args[1]) : 10;

    Random r = new Random();
    Map<Key,Integer> map = new HashMap<Key,Integer>();

    Integer[] numbers = new Integer[n];
    for(int i = 0; i < numIter; i++) {
      for(int j = 0; j < n; j++) numbers[j] = j;
      Integer[] permutation = permute(numbers, r);
      Key key = new Key(permutation);
      Integer count = map.get(key);
      Integer newCount = (count == null) ? 1 : count+1;
      map.put(key,newCount);
    }

    int numPerm = 1;
    for(int i = 2; i <= n; i++) numPerm *= i;
    double expectedCount = numIter / (double) numPerm;
    //System.out.println("expected count = " + expectedCount);

    for(Key c: map.keySet()) {
      System.out.println((map.get(c)/expectedCount) + " " + c);
    }
  }


  public static Integer[] permute(Integer[] numbers, Random r) {
    numbers = (Integer[]) numbers.clone();
    for(int i = numbers.length; i > 1; i--) {
      int index = r.nextInt(i);
      Integer temp = numbers[i-1];
      numbers[i-1] = numbers[index];
      numbers[index] = temp;
    }
    return numbers;
  }

}

