# PBinfo #3689 – 2gen – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: Darius

## Enunț

Cerința
Se n și m numere naturale. Afișați în ordine lexicografică toate șirurile de lungime m care conțin numere de la 1 la n și fiecare valoare apare de maxim două ori.

Date de intrare
Fișierul de intrare 2gen.in conține pe prima linie numerele n și m separate prin spațiu.

Date de ieșire
Fișierul de ieșire 2gen.out va conține câte o soluție pe linie. Numerele de pe aceeași linie se separă prin spații.

Restricții și precizări

1 ≤ n ≤ 6
1 ≤ m ≤ 6

Exemplu:
2gen.in

4 3
2gen.out

1 1 2 
1 1 3 
1 1 4 
1 2 1 
1 2 2 
1 2 3 
1 2 4 
1 3 1 
1 3 2 
1 3 3 
1 3 4 
1 4 1 
1 4 2 
1 4 3 
1 4 4 
2 1 1 
2 1 2 
2 1 3 
2 1 4 
2 2 1 
2 2 3 
2 2 4 
2 3 1 
2 3 2 
2 3 3 
2 3 4 
2 4 1 
2 4 2 
2 4 3 
2 4 4 
3 1 1 
3 1 2 
3 1 3 
3 1 4 
3 2 1 
3 2 2 
3 2 3 
3 2 4 
3 3 1 
3 3 2 
3 3 4 
3 4 1 
3 4 2 
3 4 3 
3 4 4 
4 1 1 
4 1 2 
4 1 3 
4 1 4 
4 2 1 
4 2 2 
4 2 3 
4 2 4 
4 3 1 
4 3 2 
4 3 3 
4 3 4 
4 4 1 
4 4 2 
4 4 3

## Cod sursă C++

```cpp
#include <fstream>
using namespace std;
int x[10], n, m, f[10];
ifstream fin ("2gen.in");
ofstream fout("2gen.out");
void backtrack(int pas) {
    if (pas > m) {
        for (int i=1;i<=m;i++)
            fout<<x[i]<<" ";
        fout<<"\n";
    } else {
        for (int i=1;i<=n;i++) {
            if (f[i] < 2) {
                x[pas] = i;
                f[i]++;
                backtrack(pas+1);
                f[i]--;
            }
        }
    }
}
int main () {
    fin>>n>>m;
    backtrack(1);
    return 0;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/3689)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/3689/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-3689/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
