#include <string>
#include <iostream>
 
class Solution {
public:
    int strongPasswordChecker(std::string password) {
        int STRSIZE = password.size(), stepCount = 0, encounteredTokenCount = 0, prev = 0;
        bool caps = false, smol = false, digit = false, anyIncStep = false;
 
        if (STRSIZE > 20) { stepCount = STRSIZE - 20; }
        else if (STRSIZE < 6) {
            return 6 - STRSIZE;
        }
 
        std::cout << "stepCount after STRSIZE = " << stepCount << "\n";
 
        for (const int c: password) {
            std::cout << "-------------------\n";
            if (!digit && c >= 48 && c <= 57) {
                digit = true;
            } else if (!caps && c >= 65 && c <= 90) {
                caps = true;
            } else if (!smol && c >= 97 && c <= 122) {
                smol = true;
            }
 
            if (prev - c == 0) {
                std::cout << "Same token " << c << " char = " << (char)c << "\n";
                encounteredTokenCount++;
                std::cout << "encounteredTokenCount = " << encounteredTokenCount << "\n";
                if (encounteredTokenCount % 3 == 0) {
                    stepCount++;
                }
 
                anyIncStep = true;
 
                // std::cout << "encounteredTokenCount = " << encounteredTokenCount << "\n";
                std::cout << "stepCount = " << stepCount << "\n";
            } else {
                std::cout << "Different Token, now: " << c << " char = " << (char)c << " Prev = " << prev << " char = " << (char)prev << "\n";
                std::cout << "encounteredTokenCount = " << encounteredTokenCount << "\n";
 
   //             if (encounteredTokenCount >= 2) {
   //                 stepCount += (3 - encounteredTokenCount);
   //             }
 
                encounteredTokenCount = 1;
                prev = c;
 
                std::cout << "stepCount = " << stepCount << "\n";
            }
 
            std::cout << "-------------------\n";
        }
 
//        if (encounteredTokenCount >= 2) {
//            stepCount += (3 - encounteredTokenCount);
 //       }
 
        std::cout << "stepCount before flag addition = " << stepCount << "\n";
 
        if (stepCount == 0) {
            stepCount += (int)(!caps);
            stepCount += (int)(!smol);
            stepCount += (int)(!digit);
        }
 
        stepCount += (int)(!anyIncStep);
 
        std::cout << "stepCount after flag addition = " << stepCount << "\n";
        return stepCount;
    }
};