#include <iostream>
#include <vector>
#include <stack>
#include <queue>
#include <algorithm>
#include <string>
#include <bitset>
#include <map>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <sstream>
#include <fstream>
//#include <tuple>
#include <set>
#include <string.h>
#include <functional>

#define X first
#define Y second
#define MP make_pair
//#define MT make_tuple
#define REP(i, a, n) for(int (i) = (a); (i) < (n); ++(i))
#define FOR(i, n) REP(i, 0, n)
typedef long long ll;
using namespace std;
const int MAX = 500;

template<class T, class U>
void convert(T &t, U &u)
{
	stringstream ss;
	ss << t;
	ss >> u;
}

int main()
{
	int p, q;
	while (cin >> p >> q){
		map<int, int> db;
		string ans;
		int idx = -1, c = 0;
		p *= 10;
		while (1){
			//商を計算.
			ans.push_back(p / q + '0');

			//割り切れてたら終了.
			if (!(p % q)) break;

			//余りを見て循環しているか判定.
			if (db.count(p % q)){
				idx = db[p % q];
				break;
			}

			//余りとその桁数を登録.
			db[p % q] = c++;

			//余りから次の割られる値を計算.
			p = ( p % q ) * 10;
		}

		if (idx != -1){
			
			if (c == 1 && idx == 0 && ans[idx] == ans[c]){
				ans.erase(1, 1);
				--idx;
			}

			cout << ans << endl;

			FOR(i, ans.size()){
				if (i > idx)	cout << "^";
				else			cout << " ";
			}
			cout << endl;
		}
		else{
			cout << ans << endl;
		}

		if (cin.eof()) break;
 	}

	return 0;
}