Codeforces Beta Round #45 D. Permutations
xの個数をCxとして、C1≧C2≧C3…が成り立てば良い。順列の個数はC1。答えは-1だけど入力にnより大きい数がくることもあり得る。
n = input() P = map(int,raw_input().split()) N = max(P) C = [0]*(N+1) A = [0]*n for i in range(n): C[P[i]] += 1 A[i] = C[P[i]] if all([C[i]>=C[i+1] for i in range(1,N)]): print C[1] for a in A: print a, print else: print -1