#include <map>
#include <string>
#include <ostream>
#include <sstream>
#include <cassert>
using namespace std;

class FuncManager{
public:
    bool declare(string name, unsigned parameter_count);
    bool exists(string name)const;
    string get_label(string name)const;
    unsigned get_parameter_count(string name)const;

private:
    map<string, unsigned>table;
};

bool FuncManager::declare(string name, unsigned parameter_count){
    map<string, unsigned>::iterator found = table.find(name);
    if(found == table.end()){
        table.insert(make_pair(name, parameter_count));
        return true;
    }else{
        return found->second == parameter_count;
    }
}

bool FuncManager::exists(string name)const{
    map<string, unsigned>::const_iterator found = table.find(name);
    return found != table.end();
}

string FuncManager::get_label(string name)const{
    return "_" + name;
}

unsigned FuncManager::get_parameter_count(string name)const{
    map<string, unsigned>::const_iterator found = table.find(name);
    assert(found != table.end());
    return found->second;
}

