描述

一场战争正在A国与B国之间如火如荼的展开。
B国凭借其强大的经济实力开发出了无数的远程攻击导弹,B国的领导人希望,通过这些导弹直接毁灭A国的指挥部,从而取得战斗的胜利!当然,A国人民不会允许这样的事情发生,所以这个世界上还存在拦截导弹。
现在,你是一名A国负责导弹拦截的高级助理。
B国的导弹有效的形成了三维立体打击,我们可以将这些导弹的位置抽象三维中间的点(大小忽略),为了简单起见,我们只考虑一个瞬时的状态,即他们静止的状态。
拦截导弹设计非常精良,可以精准的引爆对方导弹而不需要自身损失,但是A国面临的一个技术难题是,这些导弹只懂得直线上升。精确的说,这里的直线上升指xyz三维坐标单调上升。
给所有的B国导弹按照1至N标号,一枚拦截导弹可以打击的对象可以用一个xyz严格单调上升的序列来表示,例如:
B国导弹位置:(0, 0, 0) (1, 1, 0) (1, 1, 1), (2, 2, 2)

一个合法的打击序列为:{1, 3, 4}
一个不合法的打击序列为{1, 2, 4}
A国领导人将一份导弹位置的清单交给你,并且向你提出了两个最简单不过的问题(假装它最简单吧):
1.一枚拦截导弹最多可以摧毁多少B国的导弹?
2.最少使用多少拦截导弹才能摧毁B国的所有导弹?
不管是为了个人荣誉还是国家容易,更多的是为了饭碗,你,都应该好好的把这个问题解决掉!

输入格式

第一行一个整数N给出B国导弹的数目。
接下来N行每行三个非负整数Xi, Yi, Zi给出一个导弹的位置,你可以假定任意两个导弹不会出现在同一位置。

输出格式

输出文件有且仅有两行。
第一行输出一个整数P,表示一枚拦截导弹之多能够摧毁的导弹数。
第二行输出一个整数Q,表示至少需要的拦截导弹数目。

测试样例1

输入

4
0 0 0
1 1 0 
1 1 1 
2 2 2

输出


2

备注

所有的坐标都是[0,10^6]的整数
对于30%的数据满足N < 31
对于50%的数据满足N < 101
对于100%的数据满足N < 1001
 

最新文章

  1. sql中查询中的when...then 语句
  2. Mac下python初学之Image库(PIL)
  3. 如何将C#类库做成COM
  4. xsd与xsl文件的区别
  5. java多线程学习笔记——简单
  6. google map api 学习笔记
  7. android122 zhihuibeijing 主页面使用fragment搭建
  8. oracle 分区和分区索引
  9. 关于group by【转载】
  10. 【Flex】读取本地JSON,然后JSON数据转成XML数据
  11. 20175310 《Java程序设计》第9周学习总结
  12. maven项目引用时,导入类报错,选择两个项目同时执行Maven update
  13. java质数判断
  14. Linux更新时,出现无法更新锁
  15. 2019.02.28 bzoj3527: [Zjoi2014]力(fft)
  16. css学习之样式层级和权重
  17. Using the SAMA5D2-compatible ADC device
  18. python类的继承-1
  19. JTAG Level Translation
  20. C++数字三角形问题与dp算法

热门文章

  1. Powershell常用命令
  2. AngularJS服务中serivce,factory,provider的区别
  3. Python网络编程(2)——socket模块(2)
  4. HDU1003MAX SUM
  5. CodeForces - 405A
  6. iOS7隐藏顶部状态栏
  7. CityGML文件格式
  8. Android之Fragment(二)
  9. Linux系统如何查看CPU型号等
  10. hdu 1005:Number Sequence(水题)