1 #include <iostream>
   2 #include <sstream>
   3 #include <string>
   4 #include <algorithm>
   5 #include <vector>
   6 using namespace std;
   7 
   8 #define GI ({int _t; scanf("%d", &_t); _t;})
   9 #define FOR(i, a, b) for (int i=a; i<b; i++)
  10 #define REP(i, a) FOR(i, 0, a)
  11 template<class T> string toString(T n){ostringstream ost;ost<<n;ost.flush();return ost.str();}
  12 int toInt(string s){int r=0;istringstream sin(s);sin>>r;return r;}
  13 #define DBG(x) cout << #x << "::" << x << endl;
  14 #define DBGV(_v) { FOR(_i, 1, _v.size()) { cout << _v[_i] << "\t";} cout << endl;}
  15 
  16 int main() {
  17 	vector <int> coins;
  18 	coins.push_back(5); coins.push_back(10); coins.push_back(20); coins.push_back(50); coins.push_back(100);
  19 	coins.push_back(200); coins.push_back(500); coins.push_back(1000); coins.push_back(2000); coins.push_back(5000); coins.push_back(10000);
  20 	long double val;
  21 	while (cin >> val) {
  22 		if (val == 0.00) break;
  23 		int value = (int)(val * 100);
  24 		if (value%5 >= 3) value += 5-(value%5);
  25 		else if (value%5>0 && value%5<2) value-= (value%5);
  26 //		cout << value << endl;
  27 		vector < long long int > flag (value+1, 0);
  28 		flag[0] = 1;
  29 		REP(i, coins.size()) {
  30 			for (int j = 0; j <= value; j+=5) {
  31 				if (j-coins[i] >= 0 && flag[j-coins[i]] != 0) {
  32 					flag[j] += flag[j-coins[i]];
  33 				}
  34 			}
  35 		}
  36 		//DBGV(flag);
  37 		double tmp = (double)val;
  38 		//cout << val << "\t" << flag[value] << endl;
  39 		printf("%6.2f%17lld\n", tmp, flag[value]);
  40 	}
  41 	return 0;
  42 }