#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define REP(i,m,n) for(int i=(int)(m); i<(int)(n); i++)
#define rep(i,n) REP(i,0,n)
#define REPL(i,m,n) for(ll i=(ll)(m); i<(ll)(n); i++)
#define repl(i,n) REP(i,0,n)
#define all(v) v.begin(), v.end()
const int inf = 1e9+7;
const ll longinf = 1LL<<60;
const ll mod = 1e9+7;

int N;
string S;

int main(){
  cin >> N;
  cin >> S;

  // if 000 -> ans[0]=1, if 100 -> ans[100]=1, if 999 -> ans[999]=1;
  int ans[1000]; // store 0 or 1 to answer

  for(int i=0; i<=999; i++)
    ans[i] = 0;

  ans[atoi(S.substr(N-3, 3).c_str())] = 1;

  for(int i=N-4; i>=0; i--){
    vector<int> v;
    for(int j=0; j<1000; j++){
      if (ans[j] == 1) {
        int index; // index has 3 pattern.
        int new_num = atoi(S.substr(i, 1).c_str());
        // cout << "S[i]: " << new_num << ", j: " << j << endl;
        index = j % 100;
        v.push_back((new_num*100)+index);
        // ans[(ans[i]*100)+index] = 1;
        // cout << (new_num*100)+index << endl;
        index = (j / 100)*10 + (j % 10);
        v.push_back((new_num*100)+index);
        // ans[(ans[i]*100)+index] = 1;
        // cout << (new_num*100)+index << endl;
        index = j / 10;
        v.push_back((new_num*100)+index);
        // ans[(ans[i]*100)+index] = 1;
        // cout << (new_num*100)+index << endl;
      }
    }
    for(auto itr=v.begin(); itr!=v.end(); ++itr){
      ans[*itr] = 1;
    }
  }

  int count = 0;
  for(int i=0; i<=999; i++){
    if(ans[i] == 1){
      // cout << i << endl;
      count++;
    }
  }

  cout << count << endl;


  return 0;
}


// #include <bits/stdc++.h>
// using namespace std;
// #define ll long long
// #define REP(i,m,n) for(int i=(int)(m); i<(int)(n); i++)
// #define rep(i,n) REP(i,0,n)
// #define REPL(i,m,n) for(ll i=(ll)(m); i<(ll)(n); i++)
// #define repl(i,n) REP(i,0,n)
// #define all(v) v.begin(), v.end()
// const int inf = 1e9+7;
// const ll longinf = 1LL<<60;
// const ll mod = 1e9+7;


// int main(){

//   int N;
//   string S;

//   cin >> N;
//   cin >> S;

//   // if 000 -> ans[0]=1, if 100 -> ans[100]=1, if 999 -> ans[999]=1;
//   int ans[1000]; // store 0 or 1 to answer

//   for(int i=0; i<=999; i++)
//     ans[i] = 0;

//   for(int i=0; i<=9; i++) { // i is biggest keta
//     for(int ii = 0; ii<=N-3; ii++) {
//       if (atoi(S.substr(ii, 1).c_str()) == i) {

//         for(int j=0; j<=9; j++) { // j is middle keta
//           for(int jj = ii+1; jj<=N-2; jj++) {
//             if (atoi(S.substr(jj, 1).c_str()) == j) {

//               for(int k=0; k<=9; k++) { // j is middle keta
//                 for(int kk = jj+1; kk<=N-1; kk++) {
//                   if (atoi(S.substr(kk, 1).c_str()) == k) {

//                     ans[(atoi(S.substr(ii, 1).c_str()) * 100) +
//                         (atoi(S.substr(jj, 1).c_str()) * 10) +
//                         atoi(S.substr(kk, 1).c_str())] = 1;
//                     // cout << atoi(S.substr(ii, 1).c_str()) << atoi(S.substr(jj, 1).c_str()) << atoi(S.substr(kk, 1).c_str()) << endl;
//                     break;
//                   }
//                 }
//               }

//             }
//           }
//         }

//       }
//     }
//   }

//   int count = 0;
//   for(int i=0; i<=999; i++){
//     if(ans[i] == 1){
//       count++;
//     }
//   }

//   cout << count << endl;

//   return 0;
// }


Measured memory_bytes: 384