#include <bits/stdc++.h>
using namespace std;
#define int long long
#define nn "\n"
#define pi pair<int, int>
#define fi first
#define se second
#define lb lower_bound
#define ub upper_bound
#define eb emplace_back
#define pb push_back
#define TASK "CACTAMGIAC"
#define ms(a, x) memset(a, x, sizeof(a))
#define all(a) a.begin(), a.end()
#define All(a, n) a + 1, a + 1 + n
#define LOG 19
const int INF = 1e18;
const int mod = 1e9;
const int N = 1005;
const int MOD = 998244353;
struct Point{
int x, y;
};
struct Triangle{
Point p[3];
};
int n, par[N], sz[N];
Triangle a[N];
int find(int u){
if(par[u] == u) return u;
return par[u] = find(par[u]);
}
void unite(int u, int v){
u = find(u);
v = find(v);
if(u == v) return;
if(sz[u] < sz[v]) swap(u, v);
par[v] = u;
sz[u] += sz[v];
}
int cross(Point u, Point v, Point w){
return (v.x - u.x) * (w.y - u.y)
- (v.y - u.y) * (w.x - u.x);
}
bool trenDoan(Point u, Point v, Point w){
return cross(u, v, w) == 0
&& min(u.x, v.x) <= w.x
&& w.x <= max(u.x, v.x)
&& min(u.y, v.y) <= w.y
&& w.y <= max(u.y, v.y);
}
bool giaoNhau(Point u, Point v, Point s, Point t){
int c1 = cross(u, v, s);
int c2 = cross(u, v, t);
int c3 = cross(s, t, u);
int c4 = cross(s, t, v);
if(c1 == 0 && trenDoan(u, v, s)) return true;
if(c2 == 0 && trenDoan(u, v, t)) return true;
if(c3 == 0 && trenDoan(s, t, u)) return true;
if(c4 == 0 && trenDoan(s, t, v)) return true;
return ((c1 > 0 && c2 < 0) || (c1 < 0 && c2 > 0))
&& ((c3 > 0 && c4 < 0) || (c3 < 0 && c4 > 0));
}
bool trongTamGiac(Point p, Triangle t){
int s1 = cross(t.p[0], t.p[1], p);
int s2 = cross(t.p[1], t.p[2], p);
int s3 = cross(t.p[2], t.p[0], p);
return (s1 >= 0 && s2 >= 0 && s3 >= 0) || (s1 <= 0 && s2 <= 0 && s3 <= 0);
}
bool lienThong(Triangle u, Triangle v){
for(int i = 0; i < 3; i++){
if(trongTamGiac(u.p[i], v)) return true;
if(trongTamGiac(v.p[i], u)) return true;
}
for(int i = 0; i < 3; i++){
for(int j = 0; j < 3; j++){
if(giaoNhau(u.p[i], u.p[(i + 1) % 3], v.p[j], v.p[(j + 1) % 3]))
return true;
}
}
return false;
}
void nhap(){
cin >> n;
for(int i = 1; i <= n; i++){
for(int j = 0; j < 3; j++)
cin >> a[i].p[j].x >> a[i].p[j].y;
}
}
void solve(){
for(int i = 1; i <= n; i++){
par[i] = i;
sz[i] = 1;
}
for(int i = 1; i <= n; i++){
for(int j = i + 1; j <= n; j++){
if(lienThong(a[i], a[j]))
unite(i, j);
}
}
int ans = 0;
for(int i = 1; i <= n; i++){
if(find(i) == i)
ans++;
}
cout << ans << nn;
}
signed main(){
if(fopen(TASK".INP", "r")){
freopen(TASK".INP", "r", stdin);
freopen(TASK".OUT", "w", stdout);
}
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
nhap();
solve();
return (0 ^ 0);
}
CiNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNkZWZpbmUgaW50IGxvbmcgbG9uZwojZGVmaW5lIG5uICJcbiIKI2RlZmluZSBwaSBwYWlyPGludCwgaW50PgojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgbGIgbG93ZXJfYm91bmQKI2RlZmluZSB1YiB1cHBlcl9ib3VuZAojZGVmaW5lIGViIGVtcGxhY2VfYmFjawojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIFRBU0sgIkNBQ1RBTUdJQUMiCgojZGVmaW5lIG1zKGEsIHgpIG1lbXNldChhLCB4LCBzaXplb2YoYSkpCiNkZWZpbmUgYWxsKGEpIGEuYmVnaW4oKSwgYS5lbmQoKQojZGVmaW5lIEFsbChhLCBuKSBhICsgMSwgYSArIDEgKyBuCgojZGVmaW5lIExPRyAxOQoKY29uc3QgaW50IElORiA9IDFlMTg7CmNvbnN0IGludCBtb2QgPSAxZTk7CmNvbnN0IGludCBOID0gMTAwNTsKY29uc3QgaW50IE1PRCA9IDk5ODI0NDM1MzsKCnN0cnVjdCBQb2ludHsKICAgIGludCB4LCB5Owp9OwoKc3RydWN0IFRyaWFuZ2xlewogICAgUG9pbnQgcFszXTsKfTsKCmludCBuLCBwYXJbTl0sIHN6W05dOwpUcmlhbmdsZSBhW05dOwppbnQgZmluZChpbnQgdSl7CiAgICBpZihwYXJbdV0gPT0gdSkgcmV0dXJuIHU7CiAgICByZXR1cm4gcGFyW3VdID0gZmluZChwYXJbdV0pOwp9CnZvaWQgdW5pdGUoaW50IHUsIGludCB2KXsKICAgIHUgPSBmaW5kKHUpOwogICAgdiA9IGZpbmQodik7CiAgICBpZih1ID09IHYpIHJldHVybjsKICAgIGlmKHN6W3VdIDwgc3pbdl0pIHN3YXAodSwgdik7CiAgICBwYXJbdl0gPSB1OwogICAgc3pbdV0gKz0gc3pbdl07Cn0KaW50IGNyb3NzKFBvaW50IHUsIFBvaW50IHYsIFBvaW50IHcpewogICAgcmV0dXJuICh2LnggLSB1LngpICogKHcueSAtIHUueSkKICAgICAgICAgLSAodi55IC0gdS55KSAqICh3LnggLSB1LngpOwp9Cgpib29sIHRyZW5Eb2FuKFBvaW50IHUsIFBvaW50IHYsIFBvaW50IHcpewogICAgcmV0dXJuIGNyb3NzKHUsIHYsIHcpID09IDAKICAgICAgICAmJiBtaW4odS54LCB2LngpIDw9IHcueAogICAgICAgICYmIHcueCA8PSBtYXgodS54LCB2LngpCiAgICAgICAgJiYgbWluKHUueSwgdi55KSA8PSB3LnkKICAgICAgICAmJiB3LnkgPD0gbWF4KHUueSwgdi55KTsKfQoKYm9vbCBnaWFvTmhhdShQb2ludCB1LCBQb2ludCB2LCBQb2ludCBzLCBQb2ludCB0KXsKICAgIGludCBjMSA9IGNyb3NzKHUsIHYsIHMpOwogICAgaW50IGMyID0gY3Jvc3ModSwgdiwgdCk7CiAgICBpbnQgYzMgPSBjcm9zcyhzLCB0LCB1KTsKICAgIGludCBjNCA9IGNyb3NzKHMsIHQsIHYpOwogICAgaWYoYzEgPT0gMCAmJiB0cmVuRG9hbih1LCB2LCBzKSkgcmV0dXJuIHRydWU7CiAgICBpZihjMiA9PSAwICYmIHRyZW5Eb2FuKHUsIHYsIHQpKSByZXR1cm4gdHJ1ZTsKICAgIGlmKGMzID09IDAgJiYgdHJlbkRvYW4ocywgdCwgdSkpIHJldHVybiB0cnVlOwogICAgaWYoYzQgPT0gMCAmJiB0cmVuRG9hbihzLCB0LCB2KSkgcmV0dXJuIHRydWU7CiAgICByZXR1cm4gKChjMSA+IDAgJiYgYzIgPCAwKSB8fCAoYzEgPCAwICYmIGMyID4gMCkpCiAgICAgICAgJiYgKChjMyA+IDAgJiYgYzQgPCAwKSB8fCAoYzMgPCAwICYmIGM0ID4gMCkpOwp9CmJvb2wgdHJvbmdUYW1HaWFjKFBvaW50IHAsIFRyaWFuZ2xlIHQpewogICAgaW50IHMxID0gY3Jvc3ModC5wWzBdLCB0LnBbMV0sIHApOwogICAgaW50IHMyID0gY3Jvc3ModC5wWzFdLCB0LnBbMl0sIHApOwogICAgaW50IHMzID0gY3Jvc3ModC5wWzJdLCB0LnBbMF0sIHApOwogICAgcmV0dXJuIChzMSA+PSAwICYmIHMyID49IDAgJiYgczMgPj0gMCkgfHwgKHMxIDw9IDAgJiYgczIgPD0gMCAmJiBzMyA8PSAwKTsKfQpib29sIGxpZW5UaG9uZyhUcmlhbmdsZSB1LCBUcmlhbmdsZSB2KXsKICAgIGZvcihpbnQgaSA9IDA7IGkgPCAzOyBpKyspewogICAgICAgIGlmKHRyb25nVGFtR2lhYyh1LnBbaV0sIHYpKSByZXR1cm4gdHJ1ZTsKICAgICAgICBpZih0cm9uZ1RhbUdpYWModi5wW2ldLCB1KSkgcmV0dXJuIHRydWU7CiAgICB9CiAgICBmb3IoaW50IGkgPSAwOyBpIDwgMzsgaSsrKXsKICAgICAgICBmb3IoaW50IGogPSAwOyBqIDwgMzsgaisrKXsKICAgICAgICAgICAgaWYoZ2lhb05oYXUodS5wW2ldLCB1LnBbKGkgKyAxKSAlIDNdLCB2LnBbal0sIHYucFsoaiArIDEpICUgM10pKQogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwp9CnZvaWQgbmhhcCgpewogICAgY2luID4+IG47CiAgICBmb3IoaW50IGkgPSAxOyBpIDw9IG47IGkrKyl7CiAgICAgICAgZm9yKGludCBqID0gMDsgaiA8IDM7IGorKykKICAgICAgICAgICAgY2luID4+IGFbaV0ucFtqXS54ID4+IGFbaV0ucFtqXS55OwogICAgfQp9CnZvaWQgc29sdmUoKXsKICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKXsKICAgICAgICBwYXJbaV0gPSBpOwogICAgICAgIHN6W2ldID0gMTsKICAgIH0KICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKXsKICAgICAgICBmb3IoaW50IGogPSBpICsgMTsgaiA8PSBuOyBqKyspewogICAgICAgICAgICBpZihsaWVuVGhvbmcoYVtpXSwgYVtqXSkpCiAgICAgICAgICAgICAgICB1bml0ZShpLCBqKTsKICAgICAgICB9CiAgICB9CiAgICBpbnQgYW5zID0gMDsKICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKXsKICAgICAgICBpZihmaW5kKGkpID09IGkpCiAgICAgICAgICAgIGFucysrOwogICAgfQogICAgY291dCA8PCBhbnMgPDwgbm47Cn0Kc2lnbmVkIG1haW4oKXsKICAgIGlmKGZvcGVuKFRBU0siLklOUCIsICJyIikpewogICAgICAgIGZyZW9wZW4oVEFTSyIuSU5QIiwgInIiLCBzdGRpbik7CiAgICAgICAgZnJlb3BlbihUQVNLIi5PVVQiLCAidyIsIHN0ZG91dCk7CiAgICB9CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwogICAgY2luLnRpZSgwKTsKICAgIGNvdXQudGllKDApOwogICAgbmhhcCgpOwogICAgc29sdmUoKTsKICAgIHJldHVybiAoMCBeIDApOwp9Cg==