function getTopN(uint nn) public view returns(uint[] top){
        uint n = nn;
        if (n > allNames.length) {
            n = allNames.length;
        }
        top = new uint[](n);
        uint cnt = allNames.length;
        uint usedNames;

        for (uint j = 0; j < n; j++ ) {
            uint maxI = 0;
            uint maxScore = 0;
            bool found = false;
            for (uint i = 0; i < cnt; i++ ) {
                if (allNames[i] > maxScore) {
                    if ((usedNames & (uint(1) << i)) == 0) {
                        maxScore = allNames[i];
                        maxI = i;
                        found = true;
                    }
                }
            }
            if (found) {
                usedNames |= uint(1) << maxI;
                top[j] = maxScore;
            } else {
                break;
            }
        }
    }