#!/usr/bin/perl -w

use strict;

my %graph;
my $count = 0;

while (<>) {
	my ($bag, $rest) = /\A(.*) bags? contain (.*)./;
	if ($rest eq 'no other bags') {
		$graph{$bag} = []; # ale neprojevi se
	} else {
		for my $contain (split /, /, $rest) {
			my ($count, $color) = ($contain =~ /\A(\d+) (.*) bag/);
			push @{ $graph{$bag} }, [ $color => $count ];
		}
	}
}

my %seen = ('shiny gold' => 1);
my %total;

sub walk {
	my ($color) = @_;
	
	return $total{$color}
		if defined $total{$color};

	$total{$color} = 1;
	for my $next (@{ $graph{$color} }) {
		my ($ncol, $ncount) = @$next;
		$total{$color} += $ncount*walk($ncol);
	}

	return $total{$color};
}

print "Result is ", walk('shiny gold') - 1, "\n";
