#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;
}