#include <bits/stdc++.h>
#define inf 1 << 30
#define mem(a, b) memset(a, b, sizeof(a))
#define st first
#define ed second
using namespace std;
using ll = long long;
using ult = unordered_set<ll>;
using ust = unordered_set<int>;
using vt = vector<int>;
using pii = pair<int, int>;
using vpi = vector<pii>;
using ll = long long;
using pis = pair<int, string>;
using mis = unordered_map<int, string>;
const int N = 1e6 + 5;
int k, a[] = {0, 3, 0}, vis[N];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
for(;cin >> k;) {
vector<string> dis(k + 1, "");
queue<pis> q;
int p = 3 % k;
if(p == 0) dis[0] = "3";
else {
dis[p] = "3";
q.push({p, "3"});
}
string ans = "";
while(!q.empty()) {
int u = q.front().st;
string s = q.front().ed;
q.pop();
if(u == 0) {ans = s; break;}
if(s.back() == '3') {
int nxt = (u * 10 + 3) % k;
string nxts = s + "3";
if(nxts > dis[nxt]) {
dis[nxt] = nxts;
q.push({nxt, nxts});
}
}
int nxt = (u * 10 + 0) % k;
string nxts = s + "0";
if(nxts > dis[nxt]) {
dis[nxt] = nxts;
q.push({nxt, nxts});
}
}
int cnt0 = 0, cnt3 = 0;
for(char c : ans) {
cnt0 += (c == '0');
cnt3 += (c == '3');
}
cout << ans.size() << ' ' << cnt3 << ' ' << cnt0 << endl;
}
return 0;
}