vector<string> Solution::prefix(vector<string> &A) {
    // Do not write main() function.
    // Do not read input, instead use the arguments to the function.
    // Do not print the output, instead return values as specified
    // Still have a doubt. Checkout www.interviewbit.com/pages/sample_codes/ for more details
    // Construct a Trie of all words
    trieNode *root = new trieNode();
    root->freq = 0;
    for (int i = 0; i<A.size(); i++)
        insert(root, A[i]);
 
    vector<string> result;
    for(int i=0; i<A.size();i++)
        result.push_back(findPrefixes(root, A[i]));
        
    return result;    
}
TextEditor::IAssistProposal *CompletionAssistProcessor::perform(const TextEditor::AssistInterface *interface)
{
    // There we trigger request to merlin
    m_interface.reset(interface);

    if (interface->reason() == TextEditor::IdleEditor)
        return nullptr;

    setPerformWasApplicable(true);

    int curPosition = interface->position();

    int askedLine, askedCol, prefixLine, prefixCol;
    TextEditor::Convenience::convertPosition(interface->textDocument(), curPosition, &askedLine, &askedCol);
    //const int startPosition = findStartOfName();
    int startPosition, qtcPos;
    findPrefixes(-1, startPosition, qtcPos);
    TextEditor::Convenience::convertPosition(interface->textDocument(), startPosition, &prefixLine, &prefixCol);
//    qDebug() << QString("prefix(Line,Col) = (%1, %2)").arg(prefixLine).arg(prefixCol);
    // FIXME: We should check the block status in case of multi-line tokens
    const QString prefix =
            interface->textAt(startPosition, curPosition-startPosition);
//    const QString qtcPrefix =
//            interface->textAt(qtcPos, curPosition-qtcPos);
//    qDebug() << QString("QtC prefix = `%1`").arg(qtcPrefix);

    RubocopHighlighter::instance()->performCompletion(
                interface->textDocument(),
                prefix,
                qtcPos,
                askedLine, askedCol,
                [this](TextEditor::IAssistProposal *proposal) {
                    QTC_CHECK(proposal);
                    this->setAsyncProposalAvailable(proposal);
                } );

    return nullptr;
}