| Task: | Niitty | 
| Sender: | urkkiz | 
| Submission time: | 2024-11-10 22:39:39 +0200 | 
| Language: | C++ (C++17) | 
| Status: | READY | 
| Result: | 0 | 
| group | verdict | score | 
|---|---|---|
| #1 | WRONG ANSWER | 0 | 
| #2 | WRONG ANSWER | 0 | 
| #3 | WRONG ANSWER | 0 | 
| #4 | WRONG ANSWER | 0 | 
| #5 | WRONG ANSWER | 0 | 
| #6 | WRONG ANSWER | 0 | 
| test | verdict | time | group | |
|---|---|---|---|---|
| #1 | WRONG ANSWER | 0.00 s | 1, 2, 3, 4, 5, 6 | details | 
| #2 | ACCEPTED | 0.00 s | 1, 2, 3, 4, 5, 6 | details | 
| #3 | WRONG ANSWER | 0.00 s | 1, 2, 3, 4, 5, 6 | details | 
| #4 | WRONG ANSWER | 0.00 s | 1, 2, 3, 4, 5, 6 | details | 
| #5 | ACCEPTED | 0.00 s | 1, 2, 3, 4, 5, 6 | details | 
| #6 | WRONG ANSWER | 0.00 s | 2, 3, 4, 5, 6 | details | 
| #7 | WRONG ANSWER | 0.00 s | 2, 3, 4, 5, 6 | details | 
| #8 | WRONG ANSWER | 0.00 s | 2, 3, 4, 5, 6 | details | 
| #9 | WRONG ANSWER | 0.00 s | 2, 3, 4, 5, 6 | details | 
| #10 | WRONG ANSWER | 0.01 s | 3, 4, 5, 6 | details | 
| #11 | WRONG ANSWER | 0.01 s | 3, 4, 5, 6 | details | 
| #12 | WRONG ANSWER | 0.01 s | 3, 4, 5, 6 | details | 
| #13 | WRONG ANSWER | 0.01 s | 3, 4, 5, 6 | details | 
| #14 | WRONG ANSWER | 0.01 s | 4, 5, 6 | details | 
| #15 | WRONG ANSWER | 0.01 s | 4, 5, 6 | details | 
| #16 | WRONG ANSWER | 0.01 s | 4, 5, 6 | details | 
| #17 | WRONG ANSWER | 0.01 s | 4, 5, 6 | details | 
| #18 | WRONG ANSWER | 0.05 s | 5, 6 | details | 
| #19 | WRONG ANSWER | 0.05 s | 5, 6 | details | 
| #20 | WRONG ANSWER | 0.04 s | 5, 6 | details | 
| #21 | WRONG ANSWER | 0.05 s | 5, 6 | details | 
| #22 | WRONG ANSWER | 0.45 s | 6 | details | 
| #23 | WRONG ANSWER | 0.41 s | 6 | details | 
| #24 | WRONG ANSWER | 0.40 s | 6 | details | 
| #25 | WRONG ANSWER | 0.40 s | 6 | details | 
Compiler report
input/code.cpp:124: warning: ignoring '#pragma region iteration' [-Wunknown-pragmas]
  124 | #pragma region iteration down rows.
      | 
input/code.cpp:177: warning: ignoring '#pragma endregion ' [-Wunknown-pragmas]
  177 |     #pragma endregion
      | 
input/code.cpp:178: warning: ignoring '#pragma region iteration' [-Wunknown-pragmas]
  178 |     #pragma region iteration in rows left and right.
      | 
input/code.cpp:253: warning: ignoring '#pragma endregion ' [-Wunknown-pragmas]
  253 | #pragma endregion
      | 
input/code.cpp: In function 'int main()':
input/code.cpp:103:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  103 |         for (int i = 0; i < s.size(); i++) {
      |                         ~~^~~~~~~~~~
input/code.cpp:119:10: warning: unused variable 'restAreImpossible' [-Wunused-variable]
  119 |     bool restAreImpossible = false;
      |...Code
#include<iostream>
#include<list>
#include<algorithm>
#include<tuple>
#include<unordered_map>
#include<map>
using namespace std;
unordered_map<char, int> uniqueFlowers; //unique characters.
map<int, unordered_map<char, int>> charsPerRow;
map<int, unordered_map<char, int>> charsPerColumn;
//first element of tuple is amount, second element is index.
int amountOfCharInUniqueFlowers(char ch)
{
    if(uniqueFlowers.find(ch) != uniqueFlowers.end())
        return uniqueFlowers[ch];
    return 0;
}
int amountOfCharInUniqueFlowersCustomListModify(char ch, unordered_map<char, int>& mapToModify)
{
    if(mapToModify.find(ch) != mapToModify.end()){
        mapToModify[ch]--;
        return mapToModify[ch];
    }
    return 0;
}
int subtractUniqueFlowersCustomListModifyByRangeX(int row, int start, int end, unordered_map<char, int>& mapToModify, string* niitty)
{
    for(int i = start; i <= end; i++){
        if(mapToModify[niitty[row][i]] - 1 == 0)
            return -1;
        mapToModify[niitty[row][i]]--;
    }
    return 0;
}
int subtractUniqueFlowersCustomListModifyByRangeY(int column, int start, int end, unordered_map<char, int>& mapToModify, string* niitty)
{
    for(int i = start; i <= end; i++){
        if(mapToModify[niitty[i][column]] - 1 == 0){
            return -1;
        }
        mapToModify[niitty[i][column]]--;
    }
    return 0;
}
//since this is 
int uniqueFlowersContains(char ch)
{
    if(uniqueFlowers.find(ch) != uniqueFlowers.end()){
        uniqueFlowers[ch]++;
        return uniqueFlowers[ch];
    }
    return 0;
}
int getNumOfCharInString(string s, char ch) {
    int hits = 0;
    for (char c : s) {
        if (c == ch)
            hits++;
    }
    return hits;
}
int subtractMatchingKeyValues(unordered_map<char, int>& one, unordered_map<char, int> minus){
    for(const auto &[k,v] : one){
        one[k] -= minus[k]; //always has this value.
        if(one[k]<=0)
            return -1;
    }
    return 0;
}
int subtractMatchingKeyValuesArr(unordered_map<char, int>& one, unordered_map<char, int>* minus){
    for(const auto &[k,v] : one){
        for(auto &[kk,vv] : *minus){
            if(kk==k)
                one[k] -= vv; //always has this value.
            if(one[k]<=0)
                return -1;
        }
    }
    return 0;
}
bool intListContains(list<int> ls, int val) {
    return std::find(ls.begin(), ls.end(), val) != ls.end();
}
int main() {
    int SideLength = 0;
    cin >> SideLength;
    string niitty[SideLength] = {};
    for (int i = 0; i < SideLength; i++) {
        string newFieldRow = "";
        cin >> newFieldRow;
        niitty[i] = newFieldRow;
        //50.
        //niitty [i] = "ABCDEFGHIJKLMNOPQRSTUVWXYZFGHIJKLMNOPQRSTUVABC";
        //500.
        //niitty [i] = "ABCDEFABCDEFGHIJKLMNOPQRSTUVWXYZFGHIJKLMNOPQRSTUVABCABCDABCDEFGHIJKLMNOPQRSTUVWXYZFGHIJKLMNOPQRSTUVAABCDEFABCDEFGHIJKLMNOPQRSTUVWXYZFGHIJKLMNOPQRSTUVABCABCDABCDEFGHIJKLMNOPQRSTUVWXYZFGHIJKLMNOPQRSTUVABCABCDABCDEFGHIJKLMNOPQRSTUVWXYZFGHIJKLMNOPQRSTUVABCABCDABCDEFGHIJKLMNOPQRSTUVWXYZFGHIJKLMNOPQRSTUVABCABCDGHIJKLMNOPQRSTUVWXYZFGHIJKLMNOPQRSTUVABCABCDABCDEFGHIJKLMNOPQRSTUVWXYZFGHIJKLMNOPQRSTUVABCABCDABCDEFGHIJKLMNOPQRSTUVWXYZFGHIJKLMNOPQRSTUVABCABCDABCDEFGHIJKLMNOPQRSTUVWXYZFGHIJKLMNOPQRSTUVABCABCD";
        //200.
        //niitty [i] = "ABCDEFGHIJKLMNOPQRSTUVWXYZFGHIJKLMNOPQRSTUVABCXYZWABCDEFGHIJKLMNOPQRSTUVWXYZFGHIJKLMNOPQRSTUVABCXYZWABCDEFGHIJKLMNOPQRSTUVWXYZFGHIJKLMNOPQRSTUVABCXYZWABCDEFGHIJKLMNOPQRSTUVWXYZFGHIJKLMNOPQRSTUVABCXYZW";
        //balls.
        //niitty[i] = "AABABABABAAAAAAAAAABABABABAAAAAAAAABABAAAABBAAABAB";
    }
    for (string s : niitty) {
        for (int i = 0; i < s.size(); i++) {
            if (uniqueFlowersContains(s[i]) == 0){
                uniqueFlowers.insert({ s[i], 1 });
            }
        }
    }
    /*
    for(tuple<int, char> tup : uniqueFlowers){
        std::cout << get<0>(tup) << " : "  << get<1>(tup) << endl;
    }
    for(const auto &[k,v] : uniqueFlowers){
        std::cout<<k<<" : " <<v <<endl;
    }
    */
    int possibleFoundBoxes = 1;
    int uniqueFlowersCount = uniqueFlowers.size(); //wah wah wah "but 1 bit allocation!!! just use uniqueflowerscount wah wah!!" SHUT THE FUCK UP!
    bool restAreImpossible = false;
    //lists for impossible rows??? as in "jos tämä rivi otetaan pois niin ei enää toimi" (row list blacklist for x amd y dimensions)
    //here it is. consider 2 other list when going from lower left corner to upper right instead of from upper left to lower right
    list<int> blackListedRowsXdirection; //in 2nd.
    list<int> blackListedRowsYdirection; //in 1st. WHAT the FUCK are you talking about -me later
#pragma region iteration down rows.
    unordered_map<char, int> subtractedFlowers = uniqueFlowers;
    bool found = false;
    int newPossibleFound = 1;
    unordered_map<char, int> tempMapColumns;
    for (int i = 0; i < SideLength; i++) {
        found = false;
        tempMapColumns.clear();
        if ((SideLength - i) * SideLength < uniqueFlowersCount)
                break;
        for (char c : niitty[i]) {
            int numOfChar = getNumOfCharInString(niitty[i], c);
            if (numOfChar >= amountOfCharInUniqueFlowers(c)) {
                found = true;
                blackListedRowsYdirection.push_front(i);
                newPossibleFound = 0;
            }else if(!found)https://www.onlinegdb.com/edit/zYdzjCPT5M#
                tempMapColumns.insert({c, numOfChar});
        }
        possibleFoundBoxes+=newPossibleFound;
        if(!found)
            charsPerRow.insert({i, tempMapColumns});
        if(subtractMatchingKeyValues(subtractedFlowers, tempMapColumns) == -1)
            newPossibleFound = 0;
    }
    //std::cout << " y+ : " << possibleFoundBoxes << endl;
    //possibleFoundBoxes = 0;
    //careful not to check for boxes that have already been checked.
    subtractedFlowers = uniqueFlowers;
    newPossibleFound = 1;
    for (int i = SideLength - 1; i > 0; i--) {
        found = false;
        tempMapColumns.clear();
        if (i * SideLength < uniqueFlowersCount)
            break;
        for (char c : niitty[i]) {
            //std::cout<<"c: "<< c<<" has: "<< amountOfCharInUniqueFlowers(c)<<endl;
            int numOfChar = getNumOfCharInString(niitty[i], c);
            if (numOfChar >= amountOfCharInUniqueFlowers(c)) {
                found = true;
                blackListedRowsYdirection.push_front(i);
                newPossibleFound = 0;
            }else
                tempMapColumns.insert({c, numOfChar});
        }
        possibleFoundBoxes+=newPossibleFound;
        if(!found)
            charsPerRow.insert({i, tempMapColumns});
        if(subtractMatchingKeyValues(subtractedFlowers, tempMapColumns) == -1)
            newPossibleFound = 0;
    }
    //std::cout << " y- : " << possibleFoundBoxes << endl;
    //possibleFoundBoxes = 0;
    #pragma endregion
    #pragma region iteration in rows left and right.
    subtractedFlowers = uniqueFlowers;
    newPossibleFound = 1;
    unordered_map<char, int> xRowList;
    for (int i = 0; i < SideLength; i++) {
        found = false;
        xRowList = uniqueFlowers;
        if ((SideLength - i) * SideLength < uniqueFlowersCount) //possible ++ for impossibleboxes needed here?
            break;
        for (int j = 0; j < SideLength; j++) {
            if (amountOfCharInUniqueFlowersCustomListModify(niitty[j][i], xRowList) == 0) {
                found = true;
                newPossibleFound = 0;
                blackListedRowsXdirection.push_front(i);
            }else{
                if(tempMapColumns.find(niitty[j][i]) != tempMapColumns.end())
                    tempMapColumns[niitty[j][i]]++;
                else
                    tempMapColumns.insert({niitty[j][i],1});
            }
        }
        if(!found)
            charsPerColumn.insert({i, tempMapColumns});
        possibleFoundBoxes += newPossibleFound;
        if(subtractMatchingKeyValues(subtractedFlowers, tempMapColumns) == -1)
            newPossibleFound = 0;
    }
    //std::cout << " x+ : " << possibleFoundBoxes << endl;
    //possibleFoundBoxes = 0;
    subtractedFlowers = uniqueFlowers;
    newPossibleFound = 1;
    for (int i = SideLength - 1; i > 0; i--) {
        found = false;
        xRowList = uniqueFlowers;
        for (int j = 0; j < SideLength; j++) {
            if (amountOfCharInUniqueFlowersCustomListModify(niitty[j][i], xRowList) == 0) {
                found = true;
                newPossibleFound = 0;
                blackListedRowsXdirection.push_front(i);
            }else{
                if(tempMapColumns.find(niitty[j][i]) != tempMapColumns.end())
                    tempMapColumns[niitty[j][i]]++;
                else
                    tempMapColumns.insert({niitty[j][i],1});
            }
        }
        if(!found)
        charsPerColumn.insert({i, tempMapColumns});
        possibleFoundBoxes += newPossibleFound;
        if(subtractMatchingKeyValues(subtractedFlowers, tempMapColumns) == -1)
            newPossibleFound = 0;
    }
    //std::cout << " x- : " << possibleFoundBoxes << endl;
    /*
    for (const auto &[k, v] : charsPerRow){
        std::cout << k << ": y" << endl;
        for(const auto &[kk,vv] : charsPerRow[k]){
            std::cout << kk << " : " << vv << endl;
        }
    }
    for (const auto &[k, v] : charsPerColumn){
        std::cout << k << ": x" << endl;
        for(const auto &[kk,vv] : charsPerColumn[k]){
            std::cout << kk << " : " << vv << endl;
        }
    }
    */
   /*
    for(int i : blackListedRowsXdirection){
        std::cout << "xbl : " << i <<endl;
    }
        for(int i : blackListedRowsYdirection){
        std::cout << "ybl : " << i << endl;
    }
    */
#pragma endregion
    //possibleFoundBoxes = 0;
    int isEvenMatrix = SideLength % 2 == 0;
    subtractedFlowers = uniqueFlowers;
    for (int i = 0; i < SideLength/2 - isEvenMatrix; i++) {
        if(subtractMatchingKeyValuesArr(subtractedFlowers, &(charsPerColumn[SideLength-(i+1)], charsPerColumn[i])) == -1)
            break;
        if (!intListContains(blackListedRowsXdirection, i) && !intListContains(blackListedRowsXdirection, SideLength - (i+1))) {
            possibleFoundBoxes++;
        }
    }
    //std::cout << " x -><-" << possibleFoundBoxes << endl;
    //possibleFoundBoxes = 0;
    subtractedFlowers = uniqueFlowers;
    for (int i = 0; i < SideLength/2 - isEvenMatrix; i++) {
        if(subtractMatchingKeyValuesArr(subtractedFlowers, &(charsPerRow[SideLength-(i+1)], charsPerRow[i])) == -1)
            break;
        if (!intListContains(blackListedRowsYdirection, i) && !intListContains(blackListedRowsYdirection, SideLength - (i+1))) {
            possibleFoundBoxes++;
        }
    }
    //std::cout << " y -><-" << possibleFoundBoxes << endl;
    //possibleFoundBoxes = 0;
    subtractedFlowers = uniqueFlowers;
    for (int i = 0; i < SideLength/2 - isEvenMatrix; i++) {
        if(subtractMatchingKeyValuesArr(subtractedFlowers, &(charsPerRow[SideLength-(i+1)], charsPerColumn[SideLength-(i+1)], charsPerColumn[i])) == -1)
            break;
        if (!intListContains(blackListedRowsYdirection, i) && !intListContains(blackListedRowsYdirection, SideLength - (i+1)) &&!intListContains(blackListedRowsXdirection, i) && !intListContains(blackListedRowsXdirection, SideLength - (i+1)))
            possibleFoundBoxes++;
        else break;
    }
    //std::cout << " xy -><-" << possibleFoundBoxes << endl;
    //possibleFoundBoxes = 0;
    subtractedFlowers = uniqueFlowers;
    bool foundAll = false;
    for(int j = 0; j < SideLength; j++){
        for (int i = 0; i < SideLength - j; i++) {
            for(int m = 0; m <= i; m++){
                if(subtractUniqueFlowersCustomListModifyByRangeY(SideLength-(i+1)-m,i,SideLength-(j+1), subtractedFlowers, niitty) == -1 || subtractUniqueFlowersCustomListModifyByRangeX(i, i, SideLength-(j+1),subtractedFlowers, niitty) == -1){
                    //std::cout<<i-m << " : "<< j << " : " << i << " : " << m << " : " << SideLength-(j+1) <<endl;
                    foundAll = true;
                    break;
                }
                else{
                    //std::cout<<i-m << " : "<< j << " : " << i << " : " << m << " : " << SideLength-j <<endl;
                    //std::cout<<SideLength-i-m<<"!!!"<<endl;
                    possibleFoundBoxes++;
                }
            }
            if(foundAll)
                break;
        }
        if(foundAll)
            break;
    }
    //std::cout << " yx +-" << possibleFoundBoxes << endl;
    //possibleFoundBoxes = 0;
    subtractedFlowers = uniqueFlowers;
    foundAll = false;
    for(int j = 0; j < SideLength; j++){
        for(int m = 0; m < SideLength-(j+1); m++){
        for (int i = 0; i < SideLength - j; i++) {
                if(subtractUniqueFlowersCustomListModifyByRangeY(i+m, i, SideLength-(j+1), subtractedFlowers, niitty) == -1 || subtractUniqueFlowersCustomListModifyByRangeX(SideLength - (i+1), i, SideLength-(j+1), subtractedFlowers, niitty)==-1){
                foundAll = true;
                break;
                //std::cout<<i-m << " : "<< j << " : " << i << " : " << m << " : " << SideLength-(i+1)-j <<endl;
            }
            else
                possibleFoundBoxes++;
            }
            if(foundAll)
                break;
        }
        if(foundAll)
            break;
    }
    //std::cout << " yx -+ " << possibleFoundBoxes << endl;
    //possibleFoundBoxes = 0;
    subtractedFlowers = uniqueFlowers;
    foundAll = false;
    for (int j = 0; j < SideLength; j++){
        //std::cout<<"uhuh"<<endl;
        for(int m = 0; m < SideLength-(j+1); m++){
            for (int i = 0; i < SideLength - j; i++) {
                //std::cout << i << " : " <<SideLength-(i+1)-j<<endl;
                if(subtractUniqueFlowersCustomListModifyByRangeY(i, i, SideLength-(j+1), subtractedFlowers, niitty) == -1 || subtractUniqueFlowersCustomListModifyByRangeX(i+m, i, SideLength - (j+1), subtractedFlowers, niitty) == -1 ){
                    foundAll = true;
                    break;
                }
                else{
                    possibleFoundBoxes++;
                    //std::cout<<i-m << " : "<< j << " : " << i << " : " << m << " : " << SideLength-(i+1)-j <<endl;
                }
            }
            if(foundAll)
                break;
        }
        if(foundAll)
            break;
    }
    //std::cout << " xy +-" << possibleFoundBoxes << endl;
    //possibleFoundBoxes = 0;
    subtractedFlowers = uniqueFlowers;
    foundAll = false;
    for(int j = 0; j < SideLength; j++){
        if(foundAll)
            break;
        for (int m = 0; m < SideLength-(j+1); m++){
            for (int i = 0; i < SideLength - j; i++) {
                if(subtractUniqueFlowersCustomListModifyByRangeY(SideLength - (i+1), i, SideLength-(j+1), subtractedFlowers, niitty) == -1 || subtractUniqueFlowersCustomListModifyByRangeX(SideLength - (i+1) - m, i, SideLength-(j+1), subtractedFlowers, niitty)==-1){
                    foundAll = true;
                    break;
                }
                else
                    possibleFoundBoxes++;
                /*
                std::cout<<!intListContains(blackListedRowsXdirection, SideLength - (i+1)-m) << " : " << !intListContains(blackListedRowsYdirection, SideLength - (i+1))<<endl;
                if (!intListContains(blackListedRowsXdirection, SideLength - (i+1)) && !intListContains(blackListedRowsYdirection, SideLength - (i+1)-m))
                    possibleFoundBoxes++;
                else {
                    foundAll = true;
                    break;
                }
                */
            }
            if(foundAll)
                break;
        }
    }
    //std::cout << " xy -+" << possibleFoundBoxes << endl;
    /*
    for(int i : blackListedRowsXdirection){
        std::cout<<"x :"<< i <<endl;
    }
        for(int i : blackListedRowsYdirection){
        std::cout<<"y :"<< i <<endl;
    }
    */
    std::cout << possibleFoundBoxes << endl;
}Test details
Test 1
Group: 1, 2, 3, 4, 5, 6
Verdict: WRONG ANSWER
| input | 
|---|
| 10 TNCTNPNTPC NPPNTNTPTP NTNTTCNTCT NPCPNPPNTT ...  | 
| correct output | 
|---|
| 2035 | 
| user output | 
|---|
| 52 | 
Test 2
Group: 1, 2, 3, 4, 5, 6
Verdict: ACCEPTED
| input | 
|---|
| 10 NFWQLWNWYS DZOQJVXFPJ CNHXPXMCQD QRTBVNLTQC ...  | 
| correct output | 
|---|
| 9 | 
| user output | 
|---|
| 9 | 
Test 3
Group: 1, 2, 3, 4, 5, 6
Verdict: WRONG ANSWER
| input | 
|---|
| 10 XXXXXXXXXX XXXXXXXXXX XXXXXXXXXX XXXXXXXXXX ...  | 
| correct output | 
|---|
| 3025 | 
| user output | 
|---|
| 61 | 
Test 4
Group: 1, 2, 3, 4, 5, 6
Verdict: WRONG ANSWER
| input | 
|---|
| 10 FFFFFFFFFF FFFFFCFFFF FFFFFFJFFF FFFFFFFFFF ...  | 
| correct output | 
|---|
| 12 | 
| user output | 
|---|
| 8 | 
Test 5
Group: 1, 2, 3, 4, 5, 6
Verdict: ACCEPTED
| input | 
|---|
| 1 X  | 
| correct output | 
|---|
| 1 | 
| user output | 
|---|
| 1 | 
Test 6
Group: 2, 3, 4, 5, 6
Verdict: WRONG ANSWER
| input | 
|---|
| 20 BBCBUBOUOBBCUUBBCOUO BOUCOOCUBCOOOCOBOCUO UCCUUUOBCOCBCBUBUCOO BUOBUCUCUOOBCOOUBUOO ...  | 
| correct output | 
|---|
| 38724 | 
| user output | 
|---|
| 112 | 
Test 7
Group: 2, 3, 4, 5, 6
Verdict: WRONG ANSWER
| input | 
|---|
| 20 CBGLSHGZHYZDWBNDBJUG SMUXOJQYPXZDTMJUIWOJ XIDSTNBGHKRKOVUVMINB MTQGCFRUHQKALXRNCQGS ...  | 
| correct output | 
|---|
| 8334 | 
| user output | 
|---|
| 78 | 
Test 8
Group: 2, 3, 4, 5, 6
Verdict: WRONG ANSWER
| input | 
|---|
| 20 KKKKKKKKKKKKKKKKKKKK KKKKKKKKKKKKKKKKKKKK KKKKKKKKKKKKKKKKKKKK KKKKKKKKKKKKKKKKKKKK ...  | 
| correct output | 
|---|
| 44100 | 
| user output | 
|---|
| 119 | 
Test 9
Group: 2, 3, 4, 5, 6
Verdict: WRONG ANSWER
| input | 
|---|
| 20 AAAAAAAAXAAAAAAAAAAA AAAWAAAAAAAAAAAAAOAA AAAAAAAAAAAAAAAAAPAA AAAAAAAAKAAAAAAAAAAZ ...  | 
| correct output | 
|---|
| 18 | 
| user output | 
|---|
| 13 | 
Test 10
Group: 3, 4, 5, 6
Verdict: WRONG ANSWER
| input | 
|---|
| 50 GRGREEEGREGXRXXEGXXREXGRRRGRRR...  | 
| correct output | 
|---|
| 1584665 | 
| user output | 
|---|
| 292 | 
Test 11
Group: 3, 4, 5, 6
Verdict: WRONG ANSWER
| input | 
|---|
| 50 AITIISJUHCCRZNKSDCNQKYSQRINFWJ...  | 
| correct output | 
|---|
| 1077746 | 
| user output | 
|---|
| 249 | 
Test 12
Group: 3, 4, 5, 6
Verdict: WRONG ANSWER
| input | 
|---|
| 50 OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO...  | 
| correct output | 
|---|
| 1625625 | 
| user output | 
|---|
| 306 | 
Test 13
Group: 3, 4, 5, 6
Verdict: WRONG ANSWER
| input | 
|---|
| 50 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF...  | 
| correct output | 
|---|
| 1680 | 
| user output | 
|---|
| 59 | 
Test 14
Group: 4, 5, 6
Verdict: WRONG ANSWER
| input | 
|---|
| 100 NNCMDCDDCCNNNDNCMMNCDCDCCDCDNM...  | 
| correct output | 
|---|
| 25325366 | 
| user output | 
|---|
| 584 | 
Test 15
Group: 4, 5, 6
Verdict: WRONG ANSWER
| input | 
|---|
| 100 LIMQQIHASECROEVILNVULGWZJPPKOG...  | 
| correct output | 
|---|
| 22342463 | 
| user output | 
|---|
| 538 | 
Test 16
Group: 4, 5, 6
Verdict: WRONG ANSWER
| input | 
|---|
| 100 TTTTTTTTTTTTTTTTTTTTTTTTTTTTTT...  | 
| correct output | 
|---|
| 25502500 | 
| user output | 
|---|
| 610 | 
Test 17
Group: 4, 5, 6
Verdict: WRONG ANSWER
| input | 
|---|
| 100 QXQQQQQQQQQQQQQQQQQQQQQQQQQQQQ...  | 
| correct output | 
|---|
| 25650 | 
| user output | 
|---|
| 118 | 
Test 18
Group: 5, 6
Verdict: WRONG ANSWER
| input | 
|---|
| 200 NAANANMMKNKKAKMKMAKNKMNKMMNNAA...  | 
| correct output | 
|---|
| 403292767 | 
| user output | 
|---|
| 1205 | 
Test 19
Group: 5, 6
Verdict: WRONG ANSWER
| input | 
|---|
| 200 OMYWATTLURKQPTKEFMGGYAOONXWVSC...  | 
| correct output | 
|---|
| 388111321 | 
| user output | 
|---|
| 1134 | 
Test 20
Group: 5, 6
Verdict: WRONG ANSWER
| input | 
|---|
| 200 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC...  | 
| correct output | 
|---|
| 404010000 | 
| user output | 
|---|
| 1217 | 
Test 21
Group: 5, 6
Verdict: WRONG ANSWER
| input | 
|---|
| 200 LLLLLLLLLLLLLLLLLHLLLLLLLLLLLL...  | 
| correct output | 
|---|
| 14159445 | 
| user output | 
|---|
| 561 | 
Test 22
Group: 6
Verdict: WRONG ANSWER
| input | 
|---|
| 500 VVHWVUHVHUWWWVUUUWVUUHUUWHWUVW...  | 
| correct output | 
|---|
| 15683003812 | 
| user output | 
|---|
| 2981 | 
Test 23
Group: 6
Verdict: WRONG ANSWER
| input | 
|---|
| 500 OIMZGEQSBMBDSDXSWRFNKSGFEBBTJE...  | 
| correct output | 
|---|
| 15575906951 | 
| user output | 
|---|
| 2894 | 
Test 24
Group: 6
Verdict: WRONG ANSWER
| input | 
|---|
| 500 IIIIIIIIIIIIIIIIIIIIIIIIIIIIII...  | 
| correct output | 
|---|
| 15687562500 | 
| user output | 
|---|
| 3032 | 
Test 25
Group: 6
Verdict: WRONG ANSWER
| input | 
|---|
| 500 WWWWWWWWWWWWWWWWWWWWWWWWWWWWWW...  | 
| correct output | 
|---|
| 3058970930 | 
| user output | 
|---|
| 1888 | 
