/*
题目即求最小的M使得Ci+xPi≡Cj+xPj(modM)(x>min(Li,Lj))
变形可得,(P[i]-P[j])x+M*y=C[j]-C[i]
扩展欧几里得求解判断即可
*/
/*
在欧几里得算法,即b=0时,显然有x=1,y=0使得a*1+0*0=gcd(a,0)
推广,假设存在一对整数x,y满足b*x+(amod b)*y=gcd(b,a mod b),即
b*x+(a-b*(a/b,向下取整))*y=a*y+b*(x-(a/b向下取整)*y,令x'=y,y'=x-(a/b)*y,即可得到ax'+by'=gcd(a,b)
得到特解,最后a/=gcd,b/=gcd,c/=gcd,乘上c即可得到ax+by=c的一组特解,(c/gcd)*x0,(c/gcd)*y0
*/
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 15;
int n;
int c[N + 5], p[N + 5], l[N + 5];
// 扩展欧几里得,要求 a, b 非负
int exgcd(int a, int b, int &x, int &y) {
if (!b) {
x = 1;
y = 0;
return a;
}
int d = exgcd(b, a % b, x, y);
int z = x;
x = y;
y = z - y * (a / b);
return d;
}
bool check(int M) {
for (int i = 1; i <= n; ++i) {
for (int j = i + 1; j <= n; ++j) {
int a = p[i] - p[j];
int b = M;
int C = c[j] - c[i];
// 使 a 非负
if (a < 0) {
a = -a;
C = -C;
}
int x, y, g = exgcd(a, b, x, y);
if (C % g != 0) continue; // 无解
a /= g; b /= g; C /= g; // 化为互质情形
// 最小非负解
long long x0 = (long long)x * C % b;
if (x0 < 0) x0 += b;
if (x0 == 0) x0 = b; // 最小正整数解
// 若存在正整数解 x0 不超过两人的寿命,则冲突
if (x0 <= l[i] && x0 <= l[j]) return false;
}
}
return true;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n;
int maxc = 0;
for (int i = 1; i <= n; ++i) {
cin >> c[i] >> p[i] >> l[i];
maxc = max(maxc, c[i]);
}
for (int M = maxc; M <= 1000000; ++M) {
if (check(M)) {
cout << M << '\n';
return 0;
}
}
return 0;
}