title: Count Words Appear Exactly Two Times Array Words
signature: pub fn count_words_appear_exactly_two_times_array_words(stri: Vec<String>, n: i32) -> i32 {
test_code: use std::collections::HashMap;
  use std::collections::HashSet;
  use std::cmp::*;
  use std::collections::*;
  use std::fmt::*; 
  
  
  // SOLUTION CODE
  // ============================================
  PLACEHOLDER_CODE_BODY
  
  // TESTING CODE 
  // ============================================
  pub fn validate_solution(actual: i32, expected: i32)->bool{
  return actual==expected
  }
  pub fn driver(stri: Vec<String>, n: i32, expected: i32)->String{
      if validate_solution(PLACEHOLDER_FN_NAME(stri, n), expected) {
        return "PASSED".to_string();
      };
      return "FAILED".to_string();
  
  }
  
  fn main() {
      println!("TEST-0...{}", driver(
        Vec::from(["hate".to_string(), "love".to_string(), "peace".to_string(), "love".to_string(), "peace".to_string(), "hate".to_string(), "love".to_string(), "peace".to_string(), "love".to_string(), "peace".to_string()]), 10, 
        1
      ));
      
      println!("TEST-1...{}", driver(
        Vec::from(["16".to_string(), "946613197072".to_string(), "532052".to_string(), "42780833".to_string(), "511552".to_string(), "1241934".to_string(), "4".to_string(), "3444540".to_string(), "47487223670074".to_string(), "23753".to_string(), "14158".to_string(), "4".to_string(), "95420017116714".to_string(), "16".to_string(), "0845".to_string(), "689000748".to_string(), "976403809728".to_string(), "8922".to_string(), "487784120896".to_string(), "329".to_string(), "611".to_string(), "59101".to_string(), "611".to_string(), "2131059721".to_string(), "53952148295020".to_string(), "445948587".to_string(), "3905249775372".to_string(), "4683180907".to_string(), "7169093".to_string(), "01413852276627".to_string(), "63".to_string(), "5864".to_string(), "40862536595".to_string(), "2280304422294".to_string(), "930028582".to_string(), "05".to_string(), "33447".to_string()]), 32, 
        3
      ));
      
      println!("TEST-2...{}", driver(
        Vec::from(["001000100000".to_string(), "1010".to_string(), "01011".to_string(), "11".to_string(), "011".to_string(), "1010".to_string()]), 6, 
        1
      ));
      
      println!("TEST-3...{}", driver(
        Vec::from(["Om".to_string(), "Om".to_string(), "Shankar".to_string(), "Tripathi".to_string(), "Tom".to_string(), "Jerry".to_string(), "Jerry".to_string()]), 7, 
        2
      ));
      
      println!("TEST-4...{}", driver(
        Vec::from(["2".to_string(), "644".to_string(), "2".to_string(), "42484637089".to_string(), "81578664".to_string(), "0778".to_string()]), 6, 
        1
      ));
      
      println!("TEST-5...{}", driver(
        Vec::from(["001000101".to_string(), "011010".to_string(), "1".to_string(), "101010011".to_string(), "011010".to_string(), "01".to_string(), "10111000101".to_string(), "0".to_string(), "1".to_string(), "00101101".to_string(), "0".to_string(), "0".to_string()]), 12, 
        2
      ));
      
      println!("TEST-6...{}", driver(
        Vec::from(["kl".to_string(), "p sH".to_string(), "PwCPMPu".to_string(), "tQoIgPpk".to_string(), "wtsNP WjS".to_string(), "kl ".to_string(), "TXsFWgU".to_string(), "kl".to_string(), "AD".to_string(), "NjjTyFGwNWZcB".to_string(), "jpFQslbGbDI".to_string(), "cEpGAgvpk".to_string(), "EMaDkMOm".to_string(), "YZuNZgfwDIjG".to_string(), "k".to_string(), "hJx jHmGpQYwQP".to_string(), "CIETe".to_string(), "RH".to_string(), "Pj".to_string(), "h".to_string(), "DInR".to_string(), "AEsqOvliQtz".to_string(), "NwzHTALTt LS".to_string(), "LwLR".to_string(), "WvDCzlQF".to_string(), "soJb".to_string(), "WktoldCbWyTO".to_string(), "pIdRJxY".to_string(), "BmpWxjOwTXkjjL".to_string(), "zmtCiQ".to_string(), "g".to_string(), "yBmDW".to_string(), "QhaBZrQnOJaAJ".to_string(), "u".to_string(), "MGTwCKve".to_string(), "UxYQrONag".to_string(), "xsGSz".to_string(), "dqNPTT".to_string(), "U W".to_string(), "ygJKvCEKDClby".to_string(), "M".to_string(), "yXJQHxjyDQDLkT".to_string(), "oJmaREOEk YA".to_string(), "zUwiwhSMdiC".to_string(), "jYgZEktcdgLD".to_string(), "fwyTAAW".to_string(), "GENttdzeGY ".to_string()]), 43, 
        1
      ));
      
      println!("TEST-7...{}", driver(
        Vec::from(["938".to_string(), "074209".to_string(), "0949093096".to_string(), "218622476".to_string(), "71692175".to_string(), "0714".to_string(), "81217924991".to_string(), "74016430795374".to_string(), "52213147".to_string(), "338".to_string(), "939".to_string(), "798161500954".to_string(), "90528060774015".to_string(), "68715".to_string(), "75810".to_string(), "43450".to_string(), "8017".to_string(), "0193164".to_string(), "5945740".to_string(), "212".to_string(), "4589289".to_string(), "2912211026".to_string(), "0".to_string(), "49".to_string(), "8230114".to_string(), "0733435391403".to_string(), "5429".to_string(), "10070".to_string()]), 20, 
        0
      ));
      
      println!("TEST-8...{}", driver(
        Vec::from(["00".to_string(), "0".to_string(), "00".to_string(), "0101111010100".to_string(), "110".to_string()]), 4, 
        1
      ));
      
      println!("TEST-9...{}", driver(
        Vec::from(["g".to_string(), "h".to_string(), "ok".to_string(), "h".to_string(), "ok".to_string(), "sqozuC".to_string(), "ut".to_string(), "ZwRcG".to_string(), "ok".to_string(), "MR".to_string(), "jHrWyy".to_string(), "qaJlrokgRHuZH".to_string(), "LjPNzDUKszYmCq".to_string(), "g".to_string(), "ZGjLfMnyAGL".to_string(), "kEZoSxOMEWSFpw".to_string(), "IFtqNaDVnG".to_string(), "iJoJXl".to_string(), "vjrQMyWor".to_string(), "FTEHZqbHGlmHph".to_string(), "QeSdzm".to_string(), "nPostKHkigyJt".to_string(), "mOSekk".to_string()]), 15, 
        2
      ));
      
  }
source_py: def count_words_appear_exactly_two_times_array_words(stri, n):
      m = dict()
      for i in range(n):
          m[stri[i]] = (m.get(stri[i], 0) + 1)
      res = 0
      for i in m.values():
          if (i == 2):
              res += 1
      return res
source_cpp: int count_words_appear_exactly_two_times_array_words(vector<string> str, int n) {
    unordered_map < string, int > m;
    for ( int i = 0;
    i < n;
    i ++ ) m [ str [ i ] ] += 1;
    int res = 0;
    for ( auto it = m . begin ( );
    it != m . end ( );
    it ++ ) if ( ( it -> second == 2 ) ) res ++;
    return res;
  }