No.2201 p@$$w0rd (★1.5) 別解

code

string base;
ll N;
ll cnt=0;

bool is_ok(string& s){
  bool exist_char=0;
  bool exist_num=0;
  bool exist_sign=0;
  for(char c : s){
    if('a'<=c && c<='z')exist_char=1;
    if(c=='1' or c=='0')exist_num=1;
    if(c=='@' or c=='$')exist_sign=1;
  }
  return exist_char * exist_num * exist_sign;
}

void dfs(string s){
  if(s.size()==N){
    if(is_ok(s)){
      cnt++;
    }
    return;
  }
  ll idx = s.size();
  char c = base[idx];
  
  s.push_back(c);
  dfs(s);
  s.pop_back();

  if(c=='l'){
    s.push_back('1');
    dfs(s);
    s.pop_back();
  }
  if(c=='o'){
    s.push_back('0');
    dfs(s);
    s.pop_back();
  }
  if(c=='a'){
    s.push_back('@');
    dfs(s);
    s.pop_back();
  }
  if(c=='s'){
    s.push_back('$');
    dfs(s);
    s.pop_back();
  }
}

int main(){
    cin.tie(0);
    ios::sync_with_stdio(false);

    // input
    cin>>base;
    N=base.size();

    dfs("");
    p(cnt);
    
    return 0;
}