#include <iostream>#include <cstdio>#include <vector>#include <algorithm>#include <queue>#include <cmath>#include <string>#include <string.h>#include <cstdlib>#include <map>#include <set>#include <complex>#define tline tseg#define Op operator#define Re returnusing namespace std;typedef long long tpty;int f[1005];struct tpoint{tpty x,y;tpoint() { }tpoint(tpty x,tpty y) : x(x), y(y) { }#define Opb(cl) bool Op cl(const tpoint &b)const{Re ((x cl b.x)||(x==b.x&&(y cl b.y)));}Opb(<)Opb(<=)Opb(>)Opb(>=)Opb(!=)bool Op==(tpoint &b){Re (x==b.x&&y==b.y);}tpoint Op+(const tpoint &b){Re tpoint(x+b.x,y+b.y);}tpoint Op-(const tpoint &b){Re tpoint(x-b.x,y-b.y);}tpty Op%(const tpoint &b){Re x*b.y-b.x*y;}tpty Op*(const tpoint &b){Re x*b.x+y*b.y;}tpoint Op*(const tpty &b){Re tpoint(x*b,y*b);}tpoint Op/(const tpty &b){Re tpoint(x/b,y/b);}#undef Opp(cl)};struct tseg{tpoint s,e;tpty x(){Re llabs(s.x-e.x);}tpty y(){Re llabs(s.y-e.y);}bool on_line(tpoint &b){Re (s-e)%(e-b)==0;}bool on_seg(tpoint &b){Re on_line(b)&&b>=s&&b<=e;}bool is_parallel(tline &b){Re (s-e)%(b.s-b.e)==0;}bool same_line(tline &b){Re is_parallel(b)&&on_line(b.e);}void merge_seg(tseg &b){e=max(e,b.e),s=min(s,b.s);}bool inter_line(tline &b){if(is_parallel(b)&&!on_line(b.e))return false;return true;}tpoint inter_point(tline &b){return s+(e-s)*((b.e-b.s)%(b.s-s))/((b.e-b.s)%(e-s));}};set<tpoint> st;tpty gcd(tpty a,tpty b){return b?gcd(b,a%b):a;}int unfind(int x){return f[x]==x?x:(f[x]=unfind(f[x]));}void inter_seg(tseg a,tseg b){if(a.is_parallel(b))return;tpoint tmp=a.inter_point(b);if(a.on_seg(tmp)&&b.on_seg(tmp))if(st.find(tmp)==st.end())st.insert(tmp);}tseg ts[1005];int main(){int n,ans;while(scanf("%d",&n)!=EOF){for(int i=0;i<n;i++)f[i]=i;long long ans=0;for(int i=0;i<n;i++){scanf("%lld%lld%lld%lld",&ts[i].s.x,&ts[i].s.y,&ts[i].e.x,&ts[i].e.y);if(ts[i].e<ts[i].s)swap(ts[i].e,ts[i].s);}for(int i=0;i<n;i++)for(int j=i+1;j<n;j++)if(ts[i].same_line(ts[j])&&ts[i].e>=ts[j].s&&ts[i].s<=ts[j].e)f[unfind(i)]=unfind(j);for(int i=0;i<n;i++)if(unfind(i)!=i) ts[unfind(i)].merge_seg(ts[i]);for(int i=0;i<n;i++)if(i==unfind(i)){st.clear();for(int j=0;j<i;j++)if(j==unfind(j))inter_seg(ts[i],ts[j]);ans+=gcd(ts[i].x(),ts[i].y())+1-(long long)st.size();}printf("%lldn",ans);}return 0;}


