int main(int argc, char* argv[]){
    StackLi<char> tokenStack;
    StackLi<int> lineStack;
    char input;
    int lineCount = 1;
    lineStack.push(1);
    ifstream inputFile;
    inputFile.open(argv[1]);

    while(!inputFile.eof()){
        inputFile.get(input);
        
        //EOF
        if(inputFile.peek() == EOF){
            if(!tokenStack.isEmpty()){
                cout << "Unmatched " << tokenStack.topAndPop() << " on line #" << lineStack.topAndPop() << endl;
                return 0;
            }
            if(tokenStack.isEmpty()){
                cout << "OK" << endl;
            }
        }

        //end of line
        else if(input == '\n'){
            lineCount++;
            //cout << input;
        }

        //reading char
        else{
            
            //
            //match and ignore /* */
            if(input == '/'){
                inputFile.get(input); // now in /*
                if(input == '*'){
                    tokenStack.push('*');
                    lineStack.push(lineCount);
                    bool asterisk = 0;
                    bool closed = false;
                    do{
                        inputFile.get(input);
                        if(input == '*'){
                            asterisk = true;
                        }
                        else if (input != '/') {
                            asterisk = false;
                        }
                        if(asterisk == true && input == '/'){
                            //cout << asterisk << input << endl;
                            closed = true;
                            tokenStack.topAndPop();
                            lineStack.topAndPop();
                        }
                    }while(closed != true && !inputFile.eof());
                    if(inputFile.eof()){
                        cout << "Unmatched /* on line #" << lineStack.topAndPop() << endl;
                        return 0;
                    }
                }
            }
            //end matching /* */
            

            // find */
            if(input == '*'){
                inputFile.get(input);
                if(input == '/'){
                    cout << "Unmatched */ on line #" << lineCount << endl;
                    return 0;
                }
            }            
            //

            if(input == '(' || input == '{' || input == '['){
                tokenStack.push(input);
                lineStack.push(lineCount);                
            }
            if(input == ')'){
                if(tokenStack.topAndPop() != '('){
                    cout << "Unmatched " << input << " on line #" << lineStack.topAndPop() << endl;
                    return 0;
                }
            }
            if(input == '}'){
                if(tokenStack.topAndPop() != '{'){
                    cout << "Unmatched " << input << " on line #" << lineStack.topAndPop() << endl;
                    return 0;
                }
            }
            if(input == ']'){
                if(tokenStack.topAndPop() != '['){
                    cout << "Unmatched " << input << " on line #" << lineStack.topAndPop() << endl;
                    return 0;
                }
            }
        }
    }
    
    return 0;
}