<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">/** 
 * Uproszczona wersja zadania:
 *
 * https://szkopul.edu.pl/problemset/problem/9k-oNM_F-2na0A-IWrUtQ0I7/site/?key=statement
 *
 * wystarczy zwracanie liczby spĂłjnych skĹadowych (nie trzeba ich wypisywaÄ)
 * 
 * Napisz program, ktĂłry wczyta ze standardowego wejĹcia graf w formacie
 * LICZBA_WIERZCHOLKOW LICZBA_KRAWEDZI
 * w kolejnych LICZBA_KRAWEDZI opisane sÄ krawÄdzie w formacie a_i b_i (1&lt;=a_i, b_i &lt;= LICZBA_WIERZCHOLKOW)
 * oznaczajÄce, Ĺźe wierzchoĹki a_i i b_i poĹÄczone sÄ krawÄdziÄ.
 * 
 * TwĂłj program powinien obliczyÄ dopeĹnienie grafu (nie musi byÄ optymalnie)
 * a nastÄpnie policzyÄ i wypisaÄ na standardowym wyjĹciu liczbÄ spĂłjnych skĹadowych w takim grafie.
 */
import static org.junit.Assert.*;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;


import java.math.BigInteger;
import java.io.*;
import java.util.Scanner;


public class zadanieGrafoweTest {

    private ByteArrayOutputStream outContent;;

    private void setUpStreams(String inp) {
        outContent = new ByteArrayOutputStream();
        System.setOut(new PrintStream(outContent));
        System.setIn(new ByteArrayInputStream(inp.getBytes()));
    }

    private void cleanUpStreams() {
        System.setOut(null);
        System.setIn(null);
    }

    private String runProgram(String inp) {
        try {
            setUpStreams(inp);
            Solution.main(new String[0]);
            return outContent.toString();
        } finally {
            cleanUpStreams();
        }
    }

    @Test
    public void testGrafPelny() {
      testuj("3 3\n1 2\n3 1\n3 2\n",3);
    }

    @Test
    public void testKwadrat() {
      testuj("4 4\n1 2\n3 4\n2 3\n4 1\n",2);
    }

    @Test
    public void testKwadratZPowtorzonaKrawedzia() {
      testuj("4 5\n1 2\n2 1\n3 4\n2 3\n4 1\n",2); // krawÄdz 1-2 jest powtĂłrzona!
    }


    @Test
    public void testKoperta() {
      // 1---------6
      // |\       /|
      // | 3-----4 |
      // |/       \|
      // 2---------5
      testuj("6 9\n1 2\n2 3\n3 1\n3 4\n4 5\n5 6\n6 4\n1 6\n2 5\n",1); 
    }

    @Test
    public void testGrafPusty3() {
      testuj("3 0\n",1);
    }

    @Test
    public void testGrafPusty100() {
      testuj("100 0\n",1);
    }

    @Test(timeout=2000)
    public void testGrafPusty1000() {
      testuj("1000 0\n",1);
    }

    @Test(timeout=2000)
    public void testGrafPusty10000() {
      testuj("10000 0\n",1);
    }

    @Test(timeout=2000)
    public void testGrafJednaKrawedzN10000() {
      testuj("10000 1\n1 2\n",1); // to jest test nieobowiÄzkowy
    }

    private void testuj(String inp, int odp) {
        String should_be=""+odp+"\n";
        assertEquals(should_be, runProgram(inp));
    }


}
</pre></body></html>