#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
const int N = 2e5 + 10;
struct line // 表示直线
{
double k, b; // 斜率和截距
bool operator<(const line &a) const
{
if (k != a.k) // 若斜率不同,则以斜率为第一关键字进行排序
return k < a.k;
return b < a.b; // 若斜率相同,则以截距为第二关键字进行排序
}
} L[N]; // 存储直线
int cnt = 0;
int main(void)
{
// 枚举所有点对,计算对应的直线的斜率和截距
for (int x1 = 0; x1 <= 19; x1++)
{
for (int y1 = 0; y1 <= 20; y1++)
{
for (int x2 = 0; x2 <= 19; x2++)
{
for (int y2 = 0; y2 <= 20; y2++)
{
if(x1 != x2) { // 两点的横坐标不相等
double k = (double)(y2 - y1) / (x2 - x1); // 计算斜率
double b = k*x1 - y1; // 计算截距
L[cnt++] = {k, b}; // 将直线加入数组中
}
}
}
}
}
sort(L, L + cnt); // 将直线按照斜率和截距排序
int res = 1;
for(int i = 1;i < cnt;i++){
// 判断当前直线和前一条直线是否相同,若不同则答案加一
if(fabs(L[i].k-L[i-1].k) > 1e-8 || fabs(L[i].b-L[i-1].b) > 1e-8) res++;
}
cout << res + 20 << endl; // 输出答案
return 0;
}