#include #include #include #include #include using namespace std; #pragma warning(push) #pragma warning(disable: 4996) int n; string sir; string primulCuv, alDoileaCuv, alTreileaCuv; vector sirDelimitat; bool is_number(const std::string& s) { std::string::const_iterator it = s.begin(); while (it != s.end() && isdigit(*it)) ++it; return !s.empty() && it == s.end(); } string stringToUpper(string s) { for (unsigned int l = 0; l < s.length(); l++) { s[l] = toupper(s[l]); } return s; } unsigned int split(const std::string &txt, vector &strs, char ch) { unsigned int pos = txt.find(ch); unsigned int initialPos = 0; strs.clear(); // Decompose statement while (pos != std::string::npos) { strs.push_back(txt.substr(initialPos, pos - initialPos)); initialPos = pos + 1; pos = txt.find(ch, initialPos); } // Add the last one strs.push_back(txt.substr(initialPos, min(pos, txt.size()) - initialPos + 1)); return strs.size(); } int main() { //freopen("test.in", "r", stdin); //freopen("test.out", "w", stdout); cin >> n; getline(cin, sir); for (int i = 0; i < n; ++i) { getline(cin, sir); sirDelimitat.clear(); split(sir, sirDelimitat, ' '); if (sirDelimitat.size() != 3) { cout << "Incorrect!" << endl; continue; } primulCuv = sirDelimitat[0]; alDoileaCuv = sirDelimitat[1]; alTreileaCuv = sirDelimitat[2]; if (!(primulCuv == "B" || (primulCuv.length() == 2 && primulCuv[0] >= 'A' && primulCuv[0] <= 'Z' && primulCuv[1] >= 'A' && primulCuv[1] <= 'Z'))) { cout << "Incorrect!" << endl; continue; } if (!is_number(alDoileaCuv)) { cout << "Incorrect!" << endl; continue; } if (primulCuv == "B" && (alDoileaCuv.length() < 2 || alDoileaCuv.length() > 3)) { cout << "Incorrect!" << endl; continue; } if (primulCuv != "B" && alDoileaCuv.length() != 2) { cout << "Incorrect!" << endl; continue; } if (alTreileaCuv.length() != 3 || (stringToUpper(alTreileaCuv) != alTreileaCuv)) { cout << "Incorrect!" << endl; continue; } cout << "Correct!" << endl; } return 0; } #pragma warning(pop)