#include<bits/stdc++.h>
#define ll long long
using namespace std;
typedef pair<ll,ll> ii;
pair<ll,ll> slope(ll a, ll b){
if(b==0)
return {1,0};
if(a==0)
return {0,1};
a = abs(a), b = abs(b);
ll d = __gcd(abs(a),abs(b));
return {a/d,b/d};
}
pair<ll,ll> normaliza(ll a,ll b){
if(a==0){
return {0,1};
}
if(b<0){
a = -a, b = -b;
}
ll d = __gcd(abs(a),abs(b));
return {a/d,b/d};
}
pair<ll,ll> inter(ll x1, ll y1, ll x2, ll y2){
if(x2==x1)
return {x1,1};
if(y2==y1)
return {y1,1};
return normaliza(y1*(x2-x1)-x1*(y2-y1),(x2-x1));
}
ll parse(string s){
ll qtd = 0, answ = 0;
bool inputLixo = false;
for(auto c:s){
if(c=='.'){
qtd=0;
inputLixo = true;
}
else{
answ = answ*10 + (c-'0');
qtd++;
}
}
if(inputLixo==false)
qtd = 0;
while(qtd<2)
answ = 10*answ, qtd++;
return answ;
}
int main(){
ll iter = 0;
ll n;
while(cin >> n && n){
ll a, b, c, d;
map<ii,map<ii,vector<ii>>> events;
iter++;
for(ll i=0;i<n;i++){
string ra, rb, rc, rd;
cin >> ra >> rb >> rc >> rd;
a = parse(ra), b = parse(rb), c = parse(rc), d = parse(rd);
auto anchor = inter(a,b,c,d);
if(a!=c){
if(a>c) swap(a,c);
events[slope(d-b,c-a)][anchor].push_back({a,-1});
events[slope(d-b,c-a)][anchor].push_back({c,1});
}
else{
if(b>d) swap(b,d);
events[slope(d-b,
c-a)][anchor].push_back({b,-1});
events[slope(d-b,c-a)][anchor].push_back({d,1});
}
}
ll answ = 0;
for(auto v1:events){
for(auto v2:v1.second){
auto &arr = v2.second;
sort(arr.begin(),arr.end());
ll aberto = 0;
for(auto p:arr){
//cout << p.first << " " <<p.second <<", ";
aberto -= p.second;
answ += aberto==0;
}
//cout<<"\n";
}
}
cout << answ <<"\n";
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2RlZmluZSBsbCBsb25nIGxvbmcKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnR5cGVkZWYgcGFpcjxsbCxsbD4gaWk7CnBhaXI8bGwsbGw+IHNsb3BlKGxsIGEsIGxsIGIpewogICAgaWYoYj09MCkKICAgICAgICByZXR1cm4gezEsMH07CiAgICBpZihhPT0wKQogICAgICAgIHJldHVybiB7MCwxfTsKICAgIGEgPSBhYnMoYSksIGIgPSBhYnMoYik7CiAgICBsbCBkID0gX19nY2QoYWJzKGEpLGFicyhiKSk7CiAgICByZXR1cm4ge2EvZCxiL2R9Owp9CgpwYWlyPGxsLGxsPiBub3JtYWxpemEobGwgYSxsbCBiKXsKICAgIGlmKGE9PTApewogICAgICAgIHJldHVybiB7MCwxfTsKICAgIH0KICAgIGlmKGI8MCl7CiAgICAgICAgYSA9IC1hLCBiID0gLWI7CiAgICB9CiAgICBsbCBkID0gX19nY2QoYWJzKGEpLGFicyhiKSk7CiAgICByZXR1cm4ge2EvZCxiL2R9Owp9CgpwYWlyPGxsLGxsPiBpbnRlcihsbCB4MSwgbGwgeTEsIGxsIHgyLCBsbCB5Mil7CiAgICBpZih4Mj09eDEpCiAgICAgICAgcmV0dXJuIHt4MSwxfTsKICAgIGlmKHkyPT15MSkKICAgICAgICByZXR1cm4ge3kxLDF9OwogICAgcmV0dXJuIG5vcm1hbGl6YSh5MSooeDIteDEpLXgxKih5Mi15MSksKHgyLXgxKSk7Cn0KCmxsIHBhcnNlKHN0cmluZyBzKXsKICAgIGxsIHF0ZCA9IDAsIGFuc3cgPSAwOwogICAgYm9vbCBpbnB1dExpeG8gPSBmYWxzZTsKICAgIGZvcihhdXRvIGM6cyl7CiAgICAgICAgaWYoYz09Jy4nKXsKICAgICAgICAgICAgcXRkPTA7CiAgICAgICAgICAgIGlucHV0TGl4byA9IHRydWU7CiAgICAgICAgfQogICAgICAgIGVsc2V7CiAgICAgICAgICAgIGFuc3cgPSBhbnN3KjEwICsgKGMtJzAnKTsKICAgICAgICAgICAgcXRkKys7CiAgICAgICAgfQogICAgfQogICAgaWYoaW5wdXRMaXhvPT1mYWxzZSkKICAgICAgICBxdGQgPSAwOwogICAgd2hpbGUocXRkPDIpCiAgICAgICAgYW5zdyA9IDEwKmFuc3csIHF0ZCsrOwogICAgcmV0dXJuIGFuc3c7Cgp9CgppbnQgbWFpbigpewogICAgbGwgaXRlciA9IDA7CiAgICBsbCBuOwogICAgd2hpbGUoY2luID4+IG4gJiYgbil7CiAgICAgICAgbGwgYSwgYiwgYywgZDsKICAgICAgICBtYXA8aWksbWFwPGlpLHZlY3RvcjxpaT4+PiBldmVudHM7CiAgICAgICAgaXRlcisrOwogICAgICAgIGZvcihsbCBpPTA7aTxuO2krKyl7CiAgICAgICAgICAgIHN0cmluZyByYSwgcmIsIHJjLCByZDsKICAgICAgICAgICAgY2luID4+IHJhID4+IHJiID4+IHJjID4+IHJkOwoKICAgICAgICAgICAgYSA9IHBhcnNlKHJhKSwgYiA9IHBhcnNlKHJiKSwgYyA9IHBhcnNlKHJjKSwgZCA9IHBhcnNlKHJkKTsKCiAgICAgICAgICAgIGF1dG8gYW5jaG9yID0gaW50ZXIoYSxiLGMsZCk7CiAgICAgICAgICAgIGlmKGEhPWMpewogICAgICAgICAgICAgICAgaWYoYT5jKSBzd2FwKGEsYyk7CiAgICAgICAgICAgICAgICBldmVudHNbc2xvcGUoZC1iLGMtYSldW2FuY2hvcl0ucHVzaF9iYWNrKHthLC0xfSk7CiAgICAgICAgICAgICAgICBldmVudHNbc2xvcGUoZC1iLGMtYSldW2FuY2hvcl0ucHVzaF9iYWNrKHtjLDF9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlewogICAgICAgICAgICAgICAgaWYoYj5kKSBzd2FwKGIsZCk7CiAgICAgICAgICAgICAgICBldmVudHNbc2xvcGUoZC1iLAogICAgICAgICAgICAgICAgYy1hKV1bYW5jaG9yXS5wdXNoX2JhY2soe2IsLTF9KTsKICAgICAgICAgICAgICAgIGV2ZW50c1tzbG9wZShkLWIsYy1hKV1bYW5jaG9yXS5wdXNoX2JhY2soe2QsMX0pOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBsbCBhbnN3ID0gMDsKCgogICAgICAgIGZvcihhdXRvIHYxOmV2ZW50cyl7CiAgICAgICAgICAgIGZvcihhdXRvIHYyOnYxLnNlY29uZCl7CiAgICAgICAgICAgICAgICBhdXRvICZhcnIgPSB2Mi5zZWNvbmQ7CiAgICAgICAgICAgICAgICBzb3J0KGFyci5iZWdpbigpLGFyci5lbmQoKSk7CiAgICAgICAgICAgICAgICBsbCBhYmVydG8gPSAwOwogICAgICAgICAgICAgICAgZm9yKGF1dG8gcDphcnIpewogICAgICAgICAgICAgICAgICAgIC8vY291dCA8PCBwLmZpcnN0IDw8ICIgIiA8PHAuc2Vjb25kIDw8IiwgIjsKICAgICAgICAgICAgICAgICAgICBhYmVydG8gLT0gcC5zZWNvbmQ7CiAgICAgICAgICAgICAgICAgICAgYW5zdyArPSBhYmVydG89PTA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAvL2NvdXQ8PCJcbiI7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY291dCA8PCBhbnN3IDw8IlxuIjsKCiAgICB9CgogICAgcmV0dXJuIDA7Cn0=