欧洲爆破
题号:NC15507
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

hahaschool 认为一号饭堂太难吃了,他决定要毁了这一切!他已经放置好了 n 个炸弹,想到计划即将成功,忍不住激动地胡乱拍打起了炸弹遥控器,等他回过神来发现一饭已经变成一片废墟。他为了证明自己的欧洲血统,记下了拍打的次数。但是他不知道黄种人(既不是欧洲,也不是非洲)的期望次数是多少,所以找到了你帮忙。
为了便于分析问题,可以把一饭当做一个二维平面,i 号炸弹的坐标为 pi (xi,yi),爆炸半径为 ri。假设每次均匀随机地选择一颗按钮并按下,此时对应的炸弹(若未爆炸)爆炸。当所有炸弹都爆炸后,过程结束。
未爆炸过的炸弹 i 只在以下两种情况(1或2)时才会爆炸:

  1. 按下了炸弹 i 对应的按钮;
  2. 在其他爆炸的炸弹爆炸范围内。即存在某个爆炸的炸弹 j,满足 ∣pi−pj∣≤rj时,i 被 j 引爆,其中∣pi−pj∣为pipj间的欧几里得距离。

安全起见,每颗炸弹有且对应一颗按钮,每颗炸弹最多爆炸一次,hahaschool 以及他的遥控器,不受炸弹影响。

输入描述:

输入包含多组数据,处理到文件结束
每组数据第一行 有一个正整数 n(1≤n≤20)表示炸弹数量
接下来的 n 行,每行有三个整数 xi,yi,r描述第 i 颗炸弹的信息,0≤∣xi∣,∣yi∣,ri≤1,000,0000

输出描述:

求使所有炸弹爆炸的操作次数的期望,以分数形式,在模 1000,000,009 意义下输出。
示例1

输入

复制
2
1 1 0
2 2 0
2
1 1 0
1 1 0
3
1 1 2
1 2 0
10 10 5

输出

复制
3
1
500000009

说明

第三组数据,不考虑模数时,分数形式下为 9/2。
海量数据,免费测试,脱非入欧,在此一举!