#include <bits/stdc++.h>
using namespace std;
const int maxn = 50;
struct BigInt {
  const static int mod = 10000;
  const static int LEN = 4;
  int a[maxn], len;
  BigInt() {
    memset(a, 0, sizeof(a));
    len = 1;
  }
  void init(long long x) {
    memset(a, 0, sizeof(a));
    len = 0;
    do {
      a[len++] = x % mod;
      x /= mod;
    } while (x);
  }
  int Compare(const BigInt &b) {
    if (len < b.len) return -1;
    if (len > b.len) return 1;
    for (int i = len - 1; i >= 0; i--)
      if (a[i] < b.a[i])
        return -1;
      else if (a[i] > b.a[i])
        return 1;
    return 0;
  }
  BigInt operator+(const BigInt &b) const {
    BigInt ans;
    ans.len = max(len, b.len);
    for (int i = 0; i <= ans.len; i++) ans.a[i] = 0;
    for (int i = 0; i < ans.len; i++) {
      ans.a[i] += ((i < len) ? a[i] : 0) + ((i < b.len) ? b.a[i] : 0);
      ans.a[i + 1] += ans.a[i] / mod;
      ans.a[i] %= mod;
    }
    if (ans.a[ans.len] > 0) ans.len++;
    return ans;
  }
  BigInt operator-(const BigInt &b) const {
    BigInt ans;
    ans.len = len;
    int k = 0;
    for (int i = 0; i < ans.len; i++) {
      ans.a[i] = a[i] + k - b.a[i];
      if (ans.a[i] < 0)
        ans.a[i] += mod, k = -1;
      else
        k = 0;
    }
    while (ans.a[ans.len - 1] == 0 && ans.len > 1) ans.len--;
    return ans;
  }
  BigInt operator*(const BigInt &b) const {
    BigInt ans;
    for (int i = 0; i < len; i++) {
      int k = 0;
      for (int j = 0; j < b.len; j++) {
        int temp = a[i] * b.a[j] + ans.a[i + j] + k;
        ans.a[i + j] = temp % mod;
        k = temp / mod;
      }
      if (k != 0) ans.a[i + b.len] = k;
    }
    ans.len = len + b.len;
    while (ans.a[ans.len - 1] == 0 && ans.len > 1) ans.len--;
    return ans;
  }
  void output() {
    printf("%d", a[len - 1]);
    for (int i = len - 2; i >= 0; i--) printf("%04d", a[i]);
    printf("\n");
  }
} ans[121];
char s[70];
BigInt dp[70][70];
BigInt pas[70];
int main(int argc, char const *argv[]) {
  int q;
  scanf("%d", &q);
  BigInt n = BigInt();
  n.init(q);
  scanf("%s", s + 1);
  int len = strlen(s + 1);
  int dig = 0;
  while (q) {
    dig = dig + 1;
    q /= 10;
  }
  for (int i = 0; i <= len + 1; i++)
    for (int j = 0; j <= len + 1; j++) dp[i][j].init(2e18);
  dp[len + 1][0].init(0);
  pas[0].init(1);
  for (int i = 1; i <= len; i++) {
    pas[i] = pas[i - 1] * n;
  }
  for (int i = len; i >= 1; i--) {
    int las = len;
    if (s[i] == '0') las = i;
    for (int j = i; j <= i + dig && j <= las; j++) {
      BigInt num;
      num.init(0);
      BigInt TEN = BigInt();
      TEN.init(10);
      for (int k = i; k <= j; k++) {
        BigInt tmp;
        tmp.init(s[k] - '0');
        num = num * TEN + tmp;
      }
      if (num.Compare(n) >= 0) continue;
      for (int k = 1; k <= len; k++) {
        if (dp[i][k].Compare(dp[j + 1][k - 1] + pas[k - 1] * num) > 0)
          dp[i][k] = dp[j + 1][k - 1] + pas[k - 1] * num;
      }
    }
  }
  BigInt ans;
  ans.init(1e18);
  ans = ans * ans;
  for (int i = 1; i <= len; i++)
    if (ans.Compare(dp[1][i]) > 0) ans = dp[1][i];
  ans.output();
  return 0;
}
