#include <iostream>
#include <algorithm>
#include <string>

using namespace std;

bool check1(int *a, bool *b)
{
  for(int i = 0; i < 79; i++){
    bool f = true;
    for(int j = i+1; j < 80 && f; j++)
      if(a[i] != a[j]) f = false;
    
    if(f) return b[i] = f;
  }

  return false;
}

void check2(int *a, bool *b)
{
  string str = "";

  for(int i = 0; i < 80; i++) str += (char)('0'+a[i]);
  for(int i = 0; i < 79; i++)
    for(int j = i+1; j < 80; j++){
      int l = j-i;
      string sstr = str.substr(i, l);

      bool f = true;
      for(int k = j; k < 80 && f; k+=l)
	if(80-k < sstr.size()){
	  for(int p = 0; p < 80-k && f; p++)
	    if(sstr[p] != str[p+k]) f = false;
	} else {
	  if(sstr != str.substr(k, l)) f = false;
	}
 
      if(f){
	for(int k = i; k < j; k++) b[k] = true;
	return ;
      }
    }

  return ;
}

int main()
{
  int p, q, a[100];
  bool b[100];

  while(cin>>p>>q){
    fill(b, b+100, false);
    for(int i = 0; i < 80; i++){
      if(p == 0){
	q = i;
	break;
      }
      p *= 10;
      a[i] = p/q;
      p %= q;
    }

    if(p == 0){
      for(int i = 0; i < q; i++) cout << a[i];
      cout << endl;
      continue;
    }
    if(check1(a, b)){
      for(int i = 0; i < 80; i++){
	cout << a[i];
	if(b[i]){
	  cout << endl;
	  break;
	}
      }
      for(int i = 0; i < 80; i++){
	if(b[i]){
	  cout << "^" << endl;
	  break;
	}
	cout << " ";
      }
    } else {
      check2(a, b);
      for(p = 0; p < 80 && !b[p]; p++) cout << a[p];
      for(int i = p; i < 80 && b[i]; i++) cout << a[i];
      cout << endl;

      for(int i = 0; i < p; i++) cout << " ";
      for(int i = p; i < 80 && b[i]; i++) cout << "^";
      cout << endl;
    }
  }

  return 0;
}