#!/usr/bin/perl

push(@clusters, new Cluster(.16, 550, 429, 261, 88, 169, 82, 0, 1));
push(@clusters, new Cluster(.22, 313, 312, 313, 53, 53, 53, 1, 0));
push(@clusters, new Cluster(.16, 533, 535, 536, 70, 68, 66, 1, 0));
push(@clusters, new Cluster(.03, 809, 382, 332, 130, 60, 60, 0, 1));
push(@clusters, new Cluster(.06, 787, 832, 603, 94, 96, 256, 0, 1));
push(@clusters, new Cluster(.36, 347, 444, 573, 136, 190, 155, 0, 1));

while(<>){
    ($x, $y, $z) = split;
    $waltztot=$waltz=0;
    $tangotot=$tango=0;
    $tot=0;
    foreach $c (@clusters){
	$waltz += $c->probw($x, $y, $z);
	$tango += $c->probt($x, $y, $z);
    }
    $waltztot=$waltz;
    $tangotot=$tango;
    $tot = $waltztot+$tangotot;
    next if $tot==0;
    $waltzp = $waltztot/$tot;
    $tangop = $tangotot/$tot;
    if($waltzp > (2*$tangop)){
	print "Waltz ($waltzp)\n";
    }
    else{
	print "Tango ($tangop)\n";
    }
#    print "P(waltz)=$waltzp, P(tango)=$tangop\n";
}

package Cluster;

sub new {
    $me = shift;
    @params = @_;
    return bless {'w' => $params[0],
		  'xm' => $params[1],
		  'ym' => $params[2],
		  'zm' => $params[3],
		  'xv' => $params[4],
		  'yv' => $params[5],
		  'zv' => $params[6],
		  'pw' => $params[7],
		  'pt' => $params[8]
	      }
}

sub probw {
    my $this = shift;
    ($x, $y, $z) = @_;
    my $xv = $this->{xv};
    $yv = $this->{yv};
    $zv = $this->{zv};
    $xm = $this->{xm};
    $ym = $this->{ym};
    $zm = $this->{zm};
    $pw = $this->{pw};
    $pref = (1/(sqrt(2*3.14159*$xv*$xv)))*(1/(sqrt(2*3.14159*$yv*$yv)))*(1/(sqrt(2*3.14159*$zv*$zv)));
    $prob = exp(-1*(($x-$xm)**2)/(2*$xv*$xv))*exp(-1*(($y-$ym)**2)/(2*$yv*$yv))*exp(-1*(($z-$zm)**2)/(2*$zv*$zv));
    return $pref*$prob*$pw;
}

sub probt {
    $this = shift;
    ($x, $y, $z) = @_;

    $xv = $this->{xv};
    $yv = $this->{yv};
    $zv = $this->{zv};
    $xm = $this->{xm};
    $ym = $this->{ym};
    $zm = $this->{zm};
    $pt = $this->{pt};
    $pref = (1/(sqrt(2*3.14159*$xv*$xv)))*(1/(sqrt(2*3.14159*$yv*$yv)))*(1/(sqrt(2*3.14159*$zv*$zv)));
    $prob = exp(-1*(($x-$xm)**2)/(2*$xv*$xv))*exp(-1*(($y-$ym)**2)/(2*$yv*$yv))*exp(-1*(($z-$zm)**2)/(2*$zv*$zv));
    return $pref*$prob*$pt;
}

