#include <iostream>
#include <string>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <vector>
#include <set>
#include <map>
#include <stack>
#include <queue>
#include <deque>
#include <unordered_map>
#include <numeric>
#include <iomanip>
using namespace std;
#define pii pair<int, int>
#define FAST ios_base::sync_with_stdio(false); cin.tie(NULL)
const int dx[4] = {0, 1, 0, -1}, dy[4] = {1, 0, -1, 0};
const int dl[2] = {1, -1};
const int MOD = 1e9;
const int MAX = 100005;
int n, m, dist[MAX], par[MAX];
vector<pii> v[MAX]; // {node, weight}
priority_queue<pii> pq;
void init_dist(){
for(int i = 0; i <= n; i++){
dist[i] = 2e9;
}
dist[1] = 0;
}
void Dijkstra(){
pq.push({-1, 1});
while(!pq.empty()){
int cur = pq.top().second;
int d = -pq.top().first;
// cout << cur << " " << d << "\n";
pq.pop();
for(pii a : v[cur]){
int nxt = a.first;
int nd = a.second;
if(d + nd < dist[nxt]){
dist[nxt] = d + nd;
par[nxt] = cur;
pq.push({-(d + nd), nxt});
}
}
}
}
void BFS(){
deque<pii> q;
q.push_front(make_pair(1, 1));
while(!q.empty()){
int cur = q.front().first;
int d = q.front().second;
q.pop_front();
if(dist[cur] != 0){
continue;
}
dist[cur] = d;
for(auto x : v[cur]){
int nxt = x.first;
int nd = x.second;
if(nd == 1){
q.push_back(make_pair(nxt, d + nd));
}
else{
q.push_front(make_pair(nxt, d + nd));
}
}
}
cout << dist[0];
}
int main() {
FAST;
//freopen("gravity.in", "r", stdin);
//freopen("gravity.out", "w", stdout);
cin >> n;
for(int i = 1; i <= n; i++){
v[i % n].push_back(make_pair((i + 1) % n, 1));
}
for(int i = 1; i <= n; i++){
v[i % n].push_back(make_pair((i * 10) % n, 0));
}
BFS();
}