#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define min(p,q)((p)<(q)?(p):(q))
#define zahyoutype double
typedef struct Point{zahyoutype x,y;}P;
double distPP(P p,P q){return hypot(p.x-q.x,p.y-q.y);}
double arg(P p,P o){return atan2(p.y-o.y,p.x-o.x);}

void readpoint(P*p){zahyoutype x=1;scanf(x/2?"%lf%lf":"%ld%ld",&p->x,&p->y);}
void printpoint(P p){zahyoutype x=1;printf(x/2?"%.9lf %.9lf\n":"%ld %ld\n",p.x,p.y);}

int main(){
	P p1,p2;
	int r1,r2;
	readpoint(&p1);
	scanf("%d",&r1);
	readpoint(&p2);
	scanf("%d",&r2);
	double dist=distPP(p1,p2);
	double ar=arg(p2,p1);
	double s1=r1*(r1+r2)/dist;
	double s2=r1*(r1-r2)/dist;
	double theta1=acos(s1/r1);
	double theta2=acos(s2/r1);
	P ans[4];
	int cnt=0;
	if(    r1+r2  <dist)ans[cnt].x=p1.x+r1*cos(ar+theta1),ans[cnt].y=p1.y+r1*sin(ar+theta1),cnt++;
	if(    r1+r2 <=dist)ans[cnt].x=p1.x+r1*cos(ar-theta1),ans[cnt].y=p1.y+r1*sin(ar-theta1),cnt++;
	if(abs(r1-r2) <dist)ans[cnt].x=p1.x+r1*cos(ar+theta2),ans[cnt].y=p1.y+r1*sin(ar+theta2),cnt++;
	if(abs(r1-r2)<=dist)ans[cnt].x=p1.x+r1*cos(ar-theta2),ans[cnt].y=p1.y+r1*sin(ar-theta2),cnt++;
	for(int i=0;i<cnt;i++)for(int j=0;j<cnt-1-i;j++){
		if(ans[j].x>ans[j+1].x||ans[j].x==ans[j+1].x&&ans[j].y>ans[j+1].y){
			P temp=ans[j];ans[j]=ans[j+1];ans[j+1]=temp;
		}
	}
	for(int i=0;i<cnt;i++)printpoint(ans[i]);
}
