
import java.util.*;

public class CollectionShuffle {

  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;
      Collections.shuffle(Arrays.asList(numbers),r);
      Key key = new Key(numbers);
      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);
    }
  }
}

