#include <stdio.h>
int howmany = 0 ;
int tree[ ] = { 123 , 124 , 125 , 126 , 128 , 129 , 134 , 135 , 136 , 138 , 139 , 145 , 146 , 148 , 149 , 156 , 158 , 159 , 167 , 168 , 169 , 178 , 179 , 189 , 234 , 235 , 236 , 238 , 239 , 245 , 246 , 248 , 249 , 256 , 258 , 259 , 267 , 268 , 269 , 278 , 279 , 289 , 345 , 346 , 348 , 349 , 356 , 358 , 359 , 367 , 368 , 369 , 378 , 379 , 389 , 456 , 458 , 459 , 467 , 468 , 469 , 478 , 479 , 489 , 567 , 568 , 569 , 578 , 579 , 589 , 678 , 679 , 689 , 789 , 923 } ;
int distance( int x1, int y1, int x2, int y2) {
return ( x1 - x2) * ( x1 - x2) + ( y1 - y2) * ( y1 - y2) ;
}
int is_right_triangle( int a, int b, int c) {
return ( a * a + b * b == c * c || a * a + c * c == b * b || b * b + c * c == a * a) ;
}
int main( void ) {
int n;
int x[ n] , y[ n] ;
for ( int i = 0 ; i < n; i++ ) {
scanf ( "%d %d" , & x
[ i
] , & y
[ i
] ) ; }
for ( int i = 0 ; i < 75 ; i++ ) {
int a = tree[ i] / 100 - 1 ;
int b = ( tree[ i] % 100 ) / 10 - 1 ;
int c = tree[ i] % 10 - 1 ;
if ( is_right_triangle( distance( x[ a] , y[ a] , x[ b] , y[ b] ) , distance( x[ a] , y[ a] , x[ c] , y[ c] ) , distance( x[ b] , y[ b] , x[ c] , y[ c] ) ) ) {
howmany++;
}
}
return 0 ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgppbnQgaG93bWFueSA9IDA7CmludCB0cmVlW10gPSB7MTIzLCAxMjQsIDEyNSwgMTI2LCAxMjgsIDEyOSwgMTM0LCAxMzUsIDEzNiwgMTM4LCAxMzksIDE0NSwgMTQ2LCAxNDgsIDE0OSwgMTU2LCAxNTgsIDE1OSwgMTY3LCAxNjgsIDE2OSwgMTc4LCAxNzksIDE4OSwgMjM0LCAyMzUsIDIzNiwgMjM4LCAyMzksIDI0NSwgMjQ2LCAyNDgsIDI0OSwgMjU2LCAyNTgsIDI1OSwgMjY3LCAyNjgsIDI2OSwgMjc4LCAyNzksIDI4OSwgMzQ1LCAzNDYsIDM0OCwgMzQ5LCAzNTYsIDM1OCwgMzU5LCAzNjcsIDM2OCwgMzY5LCAzNzgsIDM3OSwgMzg5LCA0NTYsIDQ1OCwgNDU5LCA0NjcsIDQ2OCwgNDY5LCA0NzgsIDQ3OSwgNDg5LCA1NjcsIDU2OCwgNTY5LCA1NzgsIDU3OSwgNTg5LCA2NzgsIDY3OSwgNjg5LCA3ODksIDkyM307CgppbnQgZGlzdGFuY2UoaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyKSB7CiAgICByZXR1cm4gKHgxIC0geDIpICogKHgxIC0geDIpICsgKHkxIC0geTIpICogKHkxIC0geTIpOwp9CgppbnQgaXNfcmlnaHRfdHJpYW5nbGUoaW50IGEsIGludCBiLCBpbnQgYykgewogICAgcmV0dXJuIChhICogYSArIGIgKiBiID09IGMgKiBjIHx8IGEgKiBhICsgYyAqIGMgPT0gYiAqIGIgfHwgYiAqIGIgKyBjICogYyA9PSBhICogYSk7Cn0KCmludCBtYWluKHZvaWQpIHsKICAgIGludCBuOwogICAgc2NhbmYoIiVkIiwgJm4pOwoKICAgIGludCB4W25dLCB5W25dOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICBzY2FuZigiJWQgJWQiLCAmeFtpXSwgJnlbaV0pOwogICAgfQoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNzU7IGkrKykgewoJCWludCBhID0gdHJlZVtpXSAvIDEwMCAtIDE7CgkJaW50IGIgPSAodHJlZVtpXSAlIDEwMCkgLyAxMCAtIDE7CgkJaW50IGMgPSB0cmVlW2ldICUgMTAgLSAxOwoKCiAgICAgICAgaWYgKGlzX3JpZ2h0X3RyaWFuZ2xlKGRpc3RhbmNlKHhbYV0sIHlbYV0sIHhbYl0sIHlbYl0pLCBkaXN0YW5jZSh4W2FdLCB5W2FdLCB4W2NdLCB5W2NdKSwgZGlzdGFuY2UoeFtiXSwgeVtiXSwgeFtjXSwgeVtjXSkpKSB7CiAgICAgICAgICAgIGhvd21hbnkrKzsKICAgICAgICB9CiAgICB9CgogICAgcHJpbnRmKCIlZCIsIGhvd21hbnkpOwogICAgcmV0dXJuIDA7Cn0K