program reflect(input, output); var K:array[1..25] of record X,Y,R: Integer; end; II,I,N,J,JJ: Integer; A,b,X,Y,DX,DY,Min,X1,X2,Y1,Y2,XH,YH: real; f:text; function vzd2bodu(x1,y1,x2,y2:real):real; begin vzd2bodu := sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2)); end; procedure norm(X,Y:real; var xn,yn:real); begin xn := x/sqrt(x*x+y*y); yn := y/sqrt(x*x+y*y); end; procedure vector(dx1,dy1,dxr,dyr:real; var dx2,dy2:real); begin dx2 := dxr - dx1; dy2 := dyr - dy1; end; function primkaxkruznice(x0,y0,dx,dy,xr,yr,r:real; var x1,y1,x2,y2: real):integer; var xi,yi,b,c,d,t1,t2:real; pocet:integer; begin xi := x0 - xr; yi := y0 - yr; b := 2*dx*xi + 2*dy*yi; c := xi*xi+yi*yi - r*r; d := b*b - 4*c; if d=0 then begin pocet := 1; t1 := 0-b/2; end; if d <0 then pocet := 0; if d>0 then begin t1 := 0-b + sqrt(D); t2 := 0-b-sqrt(D); pocet := 2; end; if pocet > 0 then begin x1 := x0 + dx*t1; y1 := y0 + dy*t1; end; if pocet > 0 then begin x2 := x0 + dx*t2; y2 := y0 + dy*t2; end; primkaxkruznice := pocet; end; begin reset(f, 'reflect.in'); II := 0; readln(f,N); while N>0 do begin writeln('Scene ',II:1); I := 10; for I := 1 to N do begin read(f,K[I].X); read (f,K[I].Y); readln(f,K[I].R); end; read(f,X); read(f,Y); read(f,DX); read(f,DY); while I> 10 do begin Min := 100000000; Norm(DX,DY,dx,dy); for J := 1 to N do begin A := primkaxkruznice(X,Y,DX,DY,K[J].X, K[J].Y, K[J].R,X1,X2,Y1,Y2); if A>0 then begin B := vzd2bodu(X,Y,X1,Y1); if B < min then begin min := b; jj := j; xh := x1; yh := y1; end; end; if A>1 then begin B := vzd2bodu(X,Y,X2,Y2); if B < min then begin min := b; jj := j; xh := x2; yh := y2; end; end; end; if Min > 99000000 then I := -1 else begin write(JJ:1,' '); norm(XH - K[JJ].X, YH - K[JJ].Y,X1,Y1); vector(DX,DY,X1,Y1,X2,Y2); X:=XH; Y:= YH; norm(X2,Y2,DX,DY); end; I := I - 1; end; if I = 0 then writeln('...'); if I < 0 then writeln('inf'); writeln; readln(f,N); end; close(f); end.