#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
#include <string>
#include <set>

using namespace std;

typedef long long ll;

int main(){


	int p,q;

	while(cin>>p>>q){
		set<ll> dNumList;
		string retStr;
		p*=10;
		dNumList.insert(p);
		while(1){
			if(p<q){
				retStr+='0';
				p*=10;
				if(dNumList.find(p)!=dNumList.end()){
					break;
				}
				dNumList.insert(p);
			}
			else{
				int left = p % q;
				int np = p / q;
				if(np==0){
					break;
				}
				retStr+=('0'+np);
				p=left*10;
				if(dNumList.find(p)!=dNumList.end()){
					break;
				}
				dNumList.insert(p);
			}
		}
		cout<<retStr<<endl;
		if(p==0){
			continue;
		}
		else{
			string sufs;
			dNumList.clear();
			dNumList.insert(p);
			while(1){
				if(p<q){
					sufs+='0';
					p*=10;
					if(dNumList.find(p)!=dNumList.end()){
						break;
					}
					dNumList.insert(p);
				}
				else{
					int left = p % q;
					int np = p / q;
					if(np==0){
						break;
					}
					sufs+=('0'+np);
					p=left*10;
					if(dNumList.find(p)!=dNumList.end()){
						break;
					}
					dNumList.insert(p);
				}
			}
			ll empSize=retStr.size()-sufs.size();
			string loops;
			for(int i = 0; i < retStr.size(); i++){
				if(i>=empSize){
					loops+='^';
				}
				else{
					loops+=' ';
				}
			}
			cout<<loops<<endl;
		}
	}

	//while(cin>>p>>q){
	//	set<ll> dNumList;
	//	string retStr;
	//	ll pp=p;
	//	const ll qq=q;
	//	dNumList.insert(pp);
	//	bool f=false;


	//	bool z=false;
	//	// pp>qqツづ個湘ェツ債、pp<qqツづ可づ按づゥツづ慊づ可可算
	//	while(1){
	//		if(pp<qq){
	//			ll cnt=0;
	//			while(pp<qq){
	//				pp*=10;
	//				if(dNumList.find(pp)!=dNumList.end()){
	//					f=true;
	//					break;
	//				}
	//				if(cnt>=1)
	//					retStr+='0';
	//				dNumList.insert(pp);
	//				cnt++;
	//			}
	//			if(f)
	//				break;
	//		}

	//		ll left=pp%qq;
	//		pp/=qq;
	//		retStr+=(char)(pp+'0');
	//		pp=left;

	//		if(dNumList.find(pp)!=dNumList.end())
	//			break;
	//		if(pp==0){
	//			z=true;
	//			break;
	//		}
	//		dNumList.insert(pp);
	//	}
	//	f=false;
	//	string sufs;
	//	if(z){
	//		cout<<retStr<<endl;
	//		continue;
	//	}

	//	int init=0;
	//	if(f){
	//		init=1;
	//	}

	//	if(pp!=0){
	//		dNumList.clear();
	//		dNumList.insert(pp);

	//		while(1){
	//			if(pp<qq){
	//				ll cnt=init;

	//				while(pp<qq){
	//					pp*=10;
	//					if(dNumList.find(pp)!=dNumList.end()){
	//						f=true;
	//						break;
	//					}
	//					if(cnt>=1)
	//						sufs+='0';
	//					dNumList.insert(pp);
	//					cnt++;
	//				}
	//				if(f)
	//					break;
	//			}
	//			init=0;
	//			ll left=pp%qq;
	//			pp/=qq;
	//			sufs+=(char)(pp+'0');
	//			pp=left;
	//			
	//			if(dNumList.find(pp)!=dNumList.end()||pp==0)
	//				break;
	//			dNumList.insert(pp);
	//		}
	//	}			

	//	cout<<retStr<<endl;
	//	ll empSize=retStr.size()-sufs.size();
	//	string loops;
	//	for(int i = 0; i < retStr.size(); i++){
	//		if(i>=empSize){
	//			loops+='^';
	//		}
	//		else{
	//			loops+=' ';
	//		}
	//	}
	//		cout<<loops<<endl;
	//}

	return 0;
}