Problem:
循環小数

2 つの正の整数 p, q を入力し、 p / q を小数として正確に表現することを考えます。(ただし、0 < p < q < 106とします。)

このとき、結果は

有限の桁で正確に表現できる。

ある桁の範囲を繰り返す循環小数となる。

のいずれかとなります。筆算と同じ手順で1桁ずつ小数部を求めていくと、

割り切れた(余りが 0 になった)なら、そこまでの桁で正確に表現できた。

1度出てきた余りが、再び現れたなら、循環した。

と区別できます。

2 つの整数 p, q を入力すると、 p / q を小数で表した時の、小数部を出力するプログラムを作成してください。 ただし、

結果が有限の桁で正確に表現できる時は、数値だけを 1 行に出力してください。

結果が循環小数になる時は次のように 2 行に出力してください。

最初の行に、循環する部分までの数字を出力してください。

次の行には、循環しない部分の下には空白を出力し、循環する部分の下には「^」を出力してください。

いずれの場合も数字列は 80 文字を超えることはないものとします。

Input

入力は複数のデータセットからなります。各データセットとして、p, q が空白区切りで１行に与えられます。データセットの数は 250 を超えません。

Output

データセットごとに、循環しない小数の場合は数値の小数部分を(この場合 1 行)、循環小数の場合は循環するまでの数字と循環する部分を示す記号「^」(この場合 2 行) を出力してください。

Sample Input

1 12
10000 32768
1 11100
1 459550

Output for the Sample Input

083
^
30517578125
00009
^^^
00000217604178
^^^^^^^^^^^^

Solution in JAVA (judge verdict: Wrong Answer)

import java.util.*;
import java.lang.*;
import java.math.*;
import java.io.*;

import static java.lang.Math.*;
import static java.util.Arrays.*;

public class Main{

	Scanner sc;

	static final int INF=1<<28;
	static final double EPS=1e-9;

	class N{
		long d;
		long r;

		N(long d, long r){
			this.d=d;
			this.r=r;
		}

		@Override
		public boolean equals(Object o){
			return ((N)o).r==r;
		}
	}

	void run(){
		sc=new Scanner(System.in);
		for(; sc.hasNext();){
			long p=sc.nextLong()*10;
			long q=sc.nextLong();
			LinkedList<N> list=new LinkedList<N>();
			N n0=null;
			long r=-1;
			for(int i=0; i<50; i++){
				// print((p/q)+"");
				n0=new N(p/q, r);
				if(list.contains(n0))
					break;
				list.add(n0);
				r=p%q;
				p=(p*10)%(q*10);
			}
/*			println("n0");
			println(n0.d+", "+n0.r);
			for(N n : list){
				println(n.d+", "+n.r);
			}
			println("");*/
			// n0.rª0¾Á½çLÀ
			if(n0.r==0){
				for(N n : list){
					if(n.r==0)
						break;
					print(n.d+"");
				}
				println("");
			}else{
				for(N n : list)
					print(n.d+"");
				println("");
				boolean f=false;
				for(N n : list){
					if(n.r==n0.r)
						f=true;
					print(f?"^":" ");
				}
				println("");
			}
		}
		sc.close();
	}

	void print(String s){
		System.out.print(s);
	}

	void println(String s){
		System.out.println(s);
	}

	public static void main(String[] args){
		new Main().run();
	}
}